プロミセタイマーのフィードバックを理解する
3077 ワード
1.promise関数
上記のサイクルはイベントサイクルであり、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関数の参照として導入された.
流水灯:
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のコールバック関数を実行します.
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のコールバック関数を実行します.