プロミセタイマーのフィードバックを理解する

3077 ワード

1.promise関数Promiseコンストラクタは、それぞれresolveおよびrejectである関数をパラメータとして受け入れる.それらは2つの関数で、JavaScriptエンジンによって提供されます.自分で配置する必要はありません.resolveの関数の役割は、Promiseオブジェクトの状態を「未完成」から「成功」に変化させ、非同期動作が成功したときに呼び出し、非同期動作の結果をパラメータとして伝達することである.rejectの関数の役割は、Promiseオブジェクトの状態を「未完成」から「失敗」に変化させ、非同期動作に失敗したときに呼び出し、非同期動作が報告されたエラーをパラメータとして伝達することである.
const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/*        */){
    resolve(value);
  } else {
    reject(error);
  }
});
promise.then(function(value) {
  // success
}, function(error) {
  // failure
});
2.非同期タスクは2つに分けることができます.(1)本ラウンドに追加された非同期タスクです.(2)サブサイクルでの非同期タスクを追加します.
上記のサイクルはイベントサイクルであり、Nodeの規定により、process.nextTickとPromiseのコールバック関数が、このサイクルに追加され、すなわち同期タスクが実行されれば、それらの実行が開始される.set Timeout、set Interval、set Immediateのコールバック関数は、サブサイクルに追加されます. 
consolone.log(「a」)
set Timeout(function(){consolue.log(「"b")」、}、0)
consolone.log("c")
//a->c->bを順次印刷します.    
var i=0function create(){    var i=1    return function(){        setTimeout(function(){            i++;            consolone.log('nibu:'+i);        },0)        consolie.log(i)    } } var print 1=create();print 1();                 print 1();var print 2=create();print 2();
[Webブラウザ]「1」    /frontEnd/1217/3 html(19)[Webブラウザ]「1」    /frontEnd/1217/3 html(19)[Webブラウザ]「1」    /frontEnd/1217/3 html(19)[Webブラウザ]「nibu:2」    /frontEnd/1217/3 html(17)[Webブラウザ]「nibu:3」    /frontEnd/1217/3 html(17)[Webブラウザ]「nibu:2」
 
set Timeout(fn,time,args)  第3のパラメータはfn関数の参照として導入された.
流水灯:timeout方法は、時間が経過してから発生する結果を示すPromise例を返し、指定された時間が経過した後にms例の状態がPromiseに変化すると、resolved方法によって結合されたコールバック関数がトリガされる.
function timeout{time、done}            return new Promise(function){                set Timeout(resove、time、done)=========というタイミングで終了します.            })         };         timeout(1000,'赤信号が点灯しました').then(function(value){            consolie.log(value)//            return new Promise(function){//                set Timeout(reolve,1000,'青信号が点灯しました').
                return timeout(1000、「青信号が点灯しました」)                     })             .then(function(value){                consolie.log(value)//                return new Promise(function){//                set Timeout(resove,1000,'青灯亮了')                return timeout(1000,'青いランプが点灯しました')                     })             .then(function(value){                consolie.log(value)//                                    })
consolie.log("a")、var p=new Promise(function){    consolone.log(「b」)    resolive();consolie.log("c");p.then(function(){    consolone.log(「d」);consolone.log(「e」)//a->b->c->e->dを順次印刷する.
まず同期タスクを実行します.即ち、プリントaはPromiseの実例化も同期タスクです.Promiseの非同期ステップはthen()とcatch()に反映されていますので、次はbを印刷します.Promiseはthen()メソッドを呼び出します.そのコールバック関数はジョブキューに入れて待ちます.メインスレッドのタスクの実行が完了したら、thenのコールバック関数を実行します.