async await学習、原理、長所と短所
6784 ワード
特徴
1、難点はエラー処理メカニズムです.2、await命令はasync関数の中でしか使えません.普通の関数で使うと、3、awaitの値を間違えます.try catchで4、async関数を実行すると、運転スタックを保留して、現在の実行スタックを一時保存することができます.
Generatorに比べて、async関数は何か長所と短所がありますか?
利点:1、async関数はアクチュエータを持っています.next 2、yield命令の後はThunk関数またはPromiseオブジェクトしかできません.async関数のawaitコマンドの後はPromiseオブジェクトと元のタイプの値(数値、文字列とブール値が必要ではありませんが、このとき自動的にresovedのPromiseオブジェクトに変換されます.)です.3、async関数の戻り値はPromiseオブジェクトで、これはGenerator関数の戻り値よりIterator asyncとawaitであり、星番号とyieldより意味がはっきりしています.asyncは関数に非同期動作があり、awaitは後に続く表現は結果を待つ必要があると表しています.
注意もし二つの非同期方法が依存関係がないなら、同期の様子を書かないでください.プログラムの実行をブロックします.promise.allで包装したほうがいいです.このようにawiat同期で を実行します.
簡単に実現する
原理:自動実行のGenerator関数
asyncをgenerator awaitに変えてieldになります.
1、難点はエラー処理メカニズムです.2、await命令はasync関数の中でしか使えません.普通の関数で使うと、3、awaitの値を間違えます.try catchで4、async関数を実行すると、運転スタックを保留して、現在の実行スタックを一時保存することができます.
Generatorに比べて、async関数は何か長所と短所がありますか?
利点:1、async関数はアクチュエータを持っています.next 2、yield命令の後はThunk関数またはPromiseオブジェクトしかできません.async関数のawaitコマンドの後はPromiseオブジェクトと元のタイプの値(数値、文字列とブール値が必要ではありませんが、このとき自動的にresovedのPromiseオブジェクトに変換されます.)です.3、async関数の戻り値はPromiseオブジェクトで、これはGenerator関数の戻り値よりIterator asyncとawaitであり、星番号とyieldより意味がはっきりしています.asyncは関数に非同期動作があり、awaitは後に続く表現は結果を待つ必要があると表しています.
注意
簡単に実現する
原理:自動実行のGenerator関数
asyncをgenerator awaitに変えてieldになります.
function autoGentorat(genF) {
// promise,
return new Promise(function(resolve, reject) {
// ( Generator), next
let gen = genF();
function step(result) {
// Generator ,done true,
if (result.done) {
resolve(result.value);
} else {
// , promise
// result , promise
Promise.resolve(result.value).then(function(res) {
// ,
step(gen.next(res));
});
}
}
// generrator
step(gen.next(undefined));
});
}
function getUserInfo(){
return new Promise(function(resolve,relect){
setTimeout(function(){
resolve({name:' '})
},2000)
})
}
autoGentorat(function*() {
yield 1;
let data = yield getUserInfo();
})