asyncとawaitでのエラー処理
sync / awaitは、ES7によって提案されたPromiseに基づく非同期の最終的なソリューションです。
本当の意味での非同期コールバックの問題を解決するために、同期プロセスは非同期操作を表現します。本質的に、非同期はGeneratorの構文糖衣です。非同期と待機は、Generatorの使用を最適化するために使用され、積極的に呼び出す必要はありません。次。
- Generatorのような次のメソッドを呼び出す必要はありません。awaitが待機すると、現在の非同期操作が完了して実行されます。
- asyncによって変更された関数は、常にPromiseオブジェクトを返す非同期関数であり、thenメソッドを次のステップで使用できます。
- asyncはGenerator関数のアスタリスク*を置き換え、awaitはGeneratorのyieldを置き換えます
async function foo(){
await 异步操作;
await 异步操作;
}
foo(); // 注意: async函数, 总会返回一个Promise对象
例:非同期操作を定義するときに、Promise + async+awaitでsetTimeoutを使用します
1.非同期操作を実行するためのPromise関数を定義します
function timeout(seconds) {
// 延迟方法
return new Promise(resolve => {
setTimeout(resolve, seconds * 1000);
})
}
2.非同期を使用して待機します
async function asyncPrint(value) {
console.log('函数执行---');
await timeout(2);
console.log('2秒后执行?');
await timeout(4);
console.log("4秒后执行?");
console.log(value);
}
asyncPrint('hello async');
console.log("主线程代码----------");
awaitに続く式が拒否エラーメッセージを返す場合、awaitは下向きに実行を継続しません
awaitの後にpromiseオブジェクトが続く場合、resolveによって返された結果を直接受け入れます。
awaitはPromiseオブジェクトで使用する必要があります。
エラー報告の動作:
function timeout(seconds) {
// 延迟方法
return new Promise((resolve,reject) => {
setTimeout(reject, seconds * 1000);
})
}
const p = async ()=>{
let aaa = await timeout(1)
console.log(aaa)
}
p()
この種のエラーは、awaitを使用してエラーを直接報告します。これは、後続のaaa印刷に影響します。つまり、次のコードの実行に影響します。
エラーも収集したい: 1。try
/ catch
2.その後に.catch()3.promise
処理のレイヤーをラップする
1.試して/キャッチ
function timeout(seconds) {
// 延迟方法
return new Promise((resolve,reject) => {
setTimeout(reject, seconds * 1000);
})
}
const p = async ()=>{
try{
let aaa = await timeout(1)
console.log(aaa)
}catch{
console.log("error")
}
}
p()
2.その後に.catch()が続きます
function timeout(seconds) {
// 延迟方法
return new Promise((resolve,reject) => {
setTimeout(reject, seconds * 1000);
})
}
const p = async ()=>{
let aaa = await timeout(1).catch(_=>'error')
console.log(aaa)
}
p()
3.外側のパッケージはpromise処理の層です
const returnNewPro = (promise) => promise.then(res=>[null,res]).catch(err=>[err,null])
function timeout(seconds) {
// 延迟方法
return new Promise((resolve,reject) => {
setTimeout(reject, seconds * 1000);
})
}
const p = async ()=>{
let aaa = await returnNewPro(timeout(1))
console.log(aaa)
}
p()
上記の3つの方法は、コードのクラッシュを防ぐためにasync/awaitのエラー情報を収集するために使用されます。
その他の記事
1.フックはtoDoListを実装します
2.フックは左加算と右減算を実装
します3.Reactは複数行の入力ボックスの追加を実装します(行をクリックして行を追加します)
4。Reactページジャンプは前のページのすべてのリクエストをキャンセルします
5.Reactは協力しますaxiosリクエストインターセプト検証セッションでは、403はログインページにジャンプします
。6 。フックはcreateStore、Provider、useSelector、useDispatchを使用して接続機能を実装します
。7。ノード['solution']_の循環非同期の問題非同期でループし、サポートを待ってい
ます8.jsの非同期操作マネージャーを約束します
Liuqing
见贤思齐焉,见不贤内自省