1
在我的「gulpfile.js」的「myMethod」方法中,我想要創建多個承諾。數量取決於數組大小(方法參數)。當我打電話給我的方法時,我想確保所有的承諾都在我繼續之前完成。我寧願在所有承諾未兌現之前都回來。多個承諾的一個承諾 - 併發問題
請看看最後五行代碼。
依賴
var promiseAll = require('gulp-all');
var del = require('del');
var deleteEmpty = require('delete-empty');
gulp-all | del | delete-empty
helper方法
var oneForAllPromises = function(promises){
var promAll = promiseAll(promises);
promAll.then(function(param) {
console.log('foo');
}, function(err) {
console.error('foo');
});
return promAll;
}
有問題的代碼
var myMethod = function(array1, array2){
var promise = del(array1, {force: true});
promise.then(paths => {console.log('foo');});
var promises = [];
promise.then(()=>{
for(var i=0; i<array2.length; i++){
promises[i] = new Promise(function(resolve, reject) {
deleteEmpty(array2[i], {force: true},
function(err, deleted){
if(err){
console.log('foo');
reject
}else{
console.log('foo');
resolve
}
}
);
});
}
});
// PROBLEM: Returns empty promises array
console.log("promiesesLENGTH: "+promises.length); // promiesesLENGTH: 0
// Create one promise for all the promises
return oneForAllPromises(promises);
}
什麼觸發一個承諾開始呢? – Sailcomp
當promise的異步操作完成時調用傳遞給promise的'then'函數,並且_never_將被同步調用。你似乎對異步工作方式感到困惑。這裏有一個關於這個主題的好的指南:https://github.com/getify/You-Dont-Know-JS/tree/master/async%20%26%20performance – JLRishe
「then」一詞是爲了這裏的語言不是對代碼的引用。對困惑感到抱歉。代碼中的「then」意味着什麼意思應該清楚。但是,爲什麼你寫下「第一個承諾......尚未開始」呢?我認爲它是在它寫入的位置開始的,但是在執行數組長度的控制檯日誌時肯定沒有完成。感謝您的指導。 – Sailcomp