asyncとawaitでのエラー処理

asyncとawaitでのエラー処理

sync / awaitは、ES7によって提案されたPromiseに基づく非同期の最終的なソリューションです。

本当の意味での非同期コールバックの問題を解決するために、同期プロセスは非同期操作を表現します。本質的に、非同期はGeneratorの構文糖衣です。非同期と待機は、Generatorの使用を最適化するために使用され、積極的に呼び出す必要はありません。次。

  1. Generatorのような次のメソッドを呼び出す必要はありません。awaitが待機すると、現在の非同期操作が完了して実行されます。
  2. asyncによって変更された関数は、常にPromiseオブジェクトを返す非同期関数であり、thenメソッドを次のステップで使用できます。
  3. 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

见贤思齐焉,见不贤内自省

個人的な意見ですが、間違っている場合は訂正してください。

おすすめ

転載: blog.csdn.net/qq_43291759/article/details/124022281