經過一段時間的使用,對於async/await
的正確使用,我總結了一下幾點:
必須使用try...catch
。確保正確的流程控制。
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
// resolvefunction getdata() ), 1000);
});}
// reject
function getdata() ), 1000);
});}
async function hello()
async function hello() catch (e) ;}}
hello();
如果await
後面的promise
返回的是reject
,那麼下面的同步**不會執行。所以必須使用try...catch
,如果出現這種情況,
會進入catch
,執行錯誤處理**。
多重巢狀時,內層的try...catch
必須有返回值,且catch
中的返回值是promise.reject
。返回值是promise
。
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
// resolvefunction getdata() ), 1000);
});}
// reject
function getdata() ), 1000);
});}
async function hello() catch (e) --- hello catch`);
return promise.reject(e);
// return promise.resolve(e)}}
async function world() catch (e) ;
console.log(`$ --- world catch`);}}
world();
world
使用非同步方式呼叫了hello
,如果hello
中的getdata
方法丟擲了錯誤,會進入hello
裡的catch
,則catch
中也必須有返回值,否則,將不會進入world
中的catch
,而是繼續執行try
裡面的**;如果使用了promise.resolve
返回內容或者返回內容不是promise
,就也是執行try
裡面的**;只用返回的結果是promise
且為promise.reject
,才會正常的進入world
中的catch
。
vue 的生命週期是獨立的,不會受到非同步函式的影響。
1234567
891011
1213
1415
1617
1819
20
export default ;},async created() ,
mounted() ,
methods: ), 1000);
});}}};
我們知道created
函式會早於mounted
被呼叫,但是mounted
並不會等待created
中的非同步函式,vue
的生命週期只跟其內部的執行流程有關,不受外界的影響。
從promise到async/await
async await使用的要點
async await的使用 1 如果乙個方法標註了async,則其返回值只能是 void,task,task三者之一 2 如果非同步方法中沒有await,那麼這個方法將會以同步方式執行 3 單個async方法中可以擁有多個await 4 當遇到await表示式時,呼叫執行緒將會掛起,知道await...
使用async await 總結
async await 迴圈並行處理 同步 同一執行緒之中,順序完成不同的操作,是一種阻塞模式 後乙個請求操作需要等待前乙個操作完成之後,才能發出。非同步 需要開啟不同的執行緒,是非阻塞模式。同步類似於打 而非同步相當於發簡訊。傳送請求獲取天氣非同步操作,利用node fetch完成請求 const...
async await基本使用
asunc await的底層學習可以學習es6,它其實是乙個genterator的語法糖。執行非同步async function timer 2000 非同步promise結束 console.log ret,num 這裡等待非同步執行完,所以結果是11,11 return ret timer th...