async await学習、原理、長所と短所


特徴
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になります.
    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();
    })