我正在嘗試運行promise(這會在每個API上調用一些其他API)。根據這兩個承諾的結果,使用第三個函數處理數據。而且,依次運行的功能可能會發生變化。所以我以動態的方式建立了諾言。按順序運行JavaScript承諾。一個接一個地結束
然而,承諾似乎沒有開始前一個結局。這裏是測試相同概念的簡化模型。
var funcs = [
\t() => {
console.log('Task 1 Sart =', new Date());
\t sleeper(6000, 'Task 1 Resolved');
console.log('Task 1 Return');
},
() => {
console.log('Task 2 Sart=', new Date());
\t sleeper(5000, 'Task 2 Resolved');
console.log('Task 2 Return');
},
() => {
console.log('Task 3 Start=', new Date());
console.log('Task 2 Return');
}
];
function sleeper(m, msg) {
\t return new Promise(function(resolve, reject) {
\t setTimeout(function() {
resolve(console.log(msg, new Date()));
\t }, m);
\t });
}
function runSequence(functionSequence) {
return functionSequence.reduce((p, func) => {
return p.then(func);
}, Promise.resolve());
}
var v = runSequence(funcs);
結果如下所示 VM128:51任務1薩爾特=星期三2017年6月7日13時54分34秒GMT-0700(PDT) VM128:53任務1返回 VM128 :56任務2薩爾特=星期三2017年6月7日13時54分34秒GMT-0700(PDT) VM128:58任務2返回 VM128:61任務3開始=星期三2017年6月7日13時54分34秒GMT-0700(PDT ) VM128:62任務2返回 VM238:69任務2解決星期三2017年6月7日13時54分39秒GMT-0700(PDT) VM238:69任務1已解決Wed Jun 07 2017 13:54:40 GMT-0700(PDT)
我假設我沒有看到第二個任務開始,直到第一個任務結束。看起來他們都是按順序開始的。我錯過了什麼,或完全誤解了承諾的工作原理。我想實現是有第一個完成,然後根據意見如下開始
缺失,無'Promise'或其他值是從功能'funs'陣列,IEG,'返回軌枕(6000, '任務1解決' 返回);' – guest271314
好的。我明白你在指出什麼。有了回報,它會按順序執行某些操作 –
_「問題不在於價值返回的位置。」_是的。從函數返回'Promise',否則無法確定任務在執行異步過程的匿名函數調用中完成。儘管'sleeper()'調用你已經返回一個'Promise',但它並不會從匿名函數調用中返回。另見https://stackoverflow.com/questions/44380582/wait-for-node-js-stream-readable-pipe-to-complete? – guest271314