一个承诺多重承诺 – 并发问题

在我的“gulpfile.js”的“myMethod”方法中,我想创build多个Promise。 数量取决于数组大小(方法参数)。 当我打电话给我的方法时,我想确保所有的承诺都在我继续之前完成。 我宁愿在所有的承诺都未履行之前回来。

请看看最后五行代码。

依赖

var promiseAll = require('gulp-all'); var del = require('del'); var deleteEmpty = require('delete-empty'); 

gulp-all | del | 删除空

帮助者方法

 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); } 

在console.log中,第一个承诺promise = del(array1, {force: true}); 还没有完成,所以then没有任何代码执行。 这就是为什么你的承诺是空的。

你可以简单地回到另一个承诺:

 var myMethod = function(array1, array2){ var promise = del(array1, {force: true}); return promise.then(() => { return Promise.all(array2.map(array2value => { return new Promise(function(resolve, reject) { deleteEmpty(array2value, {force: true}, (err, deleted) => { if (err) { reject(err); } else{ resolve() } }); }); } }); }