Async 函數程式碼片段 (Snippets)
Fetch Params處理 (備用)
注意 ! 複製此程式碼片段時,請將下面 "取代這裡" 取代成兩個反斜線 "\\"
"Fetch Params處理 (備用)": {"prefix": "$async004","body": ["//Fetch Params處理 (備用)","//let ${2:fetch第二個參數名} = ${1:外部函數參數名} ?? {};//外部函數若未設置預設值為 {},則需要此行","if (${2:fetch第二個參數名}?.Params) {"," let method = ${2:fetch第二個參數名}?.method || \"GET\";"," switch (method) {"," case \"GET\":"," let count = 0;"," for (let [key, value] of Object.entries(${2:fetch第二個參數名}.Params)) {"," ${3:fetch第一個參數名 url} = (count == 0) ? `取代這裡${${3:fetch第一個參數名 url}}?取代這裡${key}=取代這裡${value}` : `取代這裡${${3:fetch第一個參數名 url}}&取代這裡${key}=取代這裡${value}`"," count++;"," }"," break;"," default:"," let ParamForm = new FormData();"," for (let [key, value] of Object.entries(${2:fetch第二個參數名}.Params)) {"," ParamForm.append(`取代這裡${key}`, `取代這裡${value}`);"," }"," ${2:fetch第二個參數名}[\"body\"] = ParamForm;"," break;"," }","}"],"description": "Fetch Params處理 (備用)"}
單發Fetch、多個await
"單發Fetch、多個await": {"prefix": "$async003","body": ["//單發Fetch、多個await ","const ${1:AsyncFunctionName} = async (${2:fetch第一個參數名 url}, ${3:fetch第二個參數名 url} = {}) => {"," try {"," // await new Promise((resolve, reject) => {"," // try {"," // //做一些前置處理,如是否需要Fetch Params處理"," // resolve(成功時回傳值);"," // } catch (Error) {"," // reject(Error);"," // }"," // });"," const Response = await fetch(${2:fetch第一個參數名 url}, ${3:fetch第二個參數名 url})"," .then(Result => {"," const ResultJson = Result.clone().json();//Respone.clone()"," //做一些事情"," console.log(ResultJson)"," return ResultJson;"," })"," .then((PreResult) => {"," //前一個then()內的 return ResultJson 將成為 PreResult"," //做一些事情"," return PreResult;"," })"," .catch((Error) => {"," //catch函數是.then(null, rejection)或.then(undefined, rejection)的別名,用於捕獲處理錯誤。"," //如果前面的異步操作拋出錯誤,狀態就會變為rejected,就會調用catch函數內指定的回調函數,處理這個錯誤。"," //Promise物件的錯誤,會一直向後傳遞,直到被捕獲為止。"," console.log(Error)"," })"," .finally(() => {"," //finally()用於指定不管Promise物件最後狀態如何,都會執行的操作。"," //而finally()的回調函數不接受任何參數,這代表著沒有辦法知道,前面的Promise狀態到底是resolved還是rejected。"," //即是說,finally()裡面的操作,應該是與狀態無關的,不依賴於Promise的執行結果。"," });"," //console.log(await response.text());"," // 其他的await... 例如 :"," //await fetch('https://my-json-server.typicode.com/taiwanhua/demo/comments').then(r=>{console.log(r)})"," //await fetch('https://my-json-server.typicode.com/taiwanhua/demo/profile').then(r=>{console.log(r)})"," return Response;"," } catch (Error) {"," console.log(Error)"," }","}"],"description": "單發Fetch、多個await"}
併發Fetch、按順序回傳結果
"併發Fetch、按順序回傳結果": {"prefix": "$async002","body": ["//併發Fetch、按順序回傳結果","const ${1:async函數名} = async (${2:fetch第一個參數名的陣列}, ${3:fetch第二個參數名的陣列}) => {"," let ${4:fetch第二個參數名的陣列重命名} = ${3:fetch第二個參數名的陣列} ?? []"," let count = 0;",""," const Promises = ${2:fetch第一個參數名的陣列}.map(async Url => { //注意這裡 雖然map方法的參數是async函數,但它是並發執行的"," try {"," // await new Promise((resolve, reject) => { "," // try {"," // //做一些前置處理,如是否需要Fetch Params處理"," // resolve(成功時回傳值);"," // } catch (Error) {"," // reject(Error);"," // }"," // });"," const Response = await fetch(Url, ${4:fetch第二個參數名的陣列重命名}[count] ? ${4:fetch第二個參數名的陣列重命名}[count] : {})"," .then(Result => {"," const ResultJson = Result.clone().json();//Response.clone()"," //做一些事情"," console.log(ResultJson)"," return ResultJson;"," })"," .then((PreResult) => {"," //前一個then()內的 return ResultJson 將成為 PreResult"," //做一些事情"," return PreResult;"," })"," .catch((Error) => {"," //catch函數是.then(null, rejection)或.then(undefined, rejection)的別名,用於捕獲處理錯誤。"," //如果前面的異步操作拋出錯誤,狀態就會變為rejected,就會調用catch函數內指定的回調函數,處理這個錯誤。"," //Promise物件的錯誤,會一直向後傳遞,直到被捕獲為止。"," console.log(Error)"," })"," .finally(() => {"," //finally()用於指定不管Promise物件最後狀態如何,都會執行的操作。"," //而finally()的回調函數不接受任何參數,這代表著沒有辦法知道,前面的Promise狀態到底是resolved還是rejected。"," //即是說,finally()裡面的操作,應該是與狀態無關的,不依賴於Promise的執行結果。"," });"," //console.log(await response.text());"," "," return Response;"," } catch (Error) {"," console.log(Error)"," }"," count++;"," });",""," // 按次序輸出"," for (const Promise of Promises) {"," //做一些事情"," console.log(await Promise);"," }","}"],"description": "Async: 併發Fetch、按順序回傳結果"}
繼發Fetch、按順序回傳結果
"繼發Fetch、按順序回傳結果": {"prefix": "$async001","body": ["//繼發Fetch、按順序回傳結果","const ${1:async函數名} = async (${2:fetch第一個參數名的陣列}, ${3:fetch第二個參數名的陣列}) => {"," let ${4:fetch第二個參數名的陣列重命名} = ${3:fetch第二個參數名的陣列} ?? []"," let count = 0;",""," for (const Url of ${2:fetch第一個參數名的陣列}) {"," try {"," // await new Promise((resolve, reject) => {"," // try {"," // //做一些前置處理,如是否需要Fetch Params處理"," // resolve(成功時回傳值);"," // } catch (Error) {"," // reject(Error);"," // }"," // });"," const Response = await fetch(Url, ${4:fetch第二個參數名的陣列重命名}[count] ? ${4:fetch第二個參數名的陣列重命名}[count] : {})"," .then(Result => {"," const ResultJson = Result.clone().json();//Response.clone()"," //做一些事情"," console.log(ResultJson)"," return ResultJson;"," })"," .then((PreResult) => {"," //前一個then()內的 return ResultJson 將成為 PreResult"," //做一些事情"," })"," .catch((Error) => {"," //catch函數是.then(null, rejection)或.then(undefined, rejection)的別名,用於捕獲處理錯誤。"," //如果前面的異步操作拋出錯誤,狀態就會變為rejected,就會調用catch函數內指定的回調函數,處理這個錯誤。"," //Promise物件的錯誤,會一直向後傳遞,直到被捕獲為止。"," console.log(Error)"," })"," .finally(() => {"," //finally()用於指定不管Promise物件最後狀態如何,都會執行的操作。"," //而finally()的回調函數不接受任何參數,這代表著沒有辦法知道,前面的Promise狀態到底是resolved還是rejected。"," //即是說,finally()裡面的操作,應該是與狀態無關的,不依賴於Promise的執行結果。"," });"," //console.log(await response.text());"," return Response;"," } catch (Error) {"," console.log(Error)"," }",""," count++;"," }","}"],"description": "Async: 繼發Fetch、按順序回傳結果"}