一个承诺换多个承诺-并发问题
One Promise for Multiple Promises - Concurrency Issue
在我的"gulpfile.js"的方法"myMethod"中,我想创建多个Promise。数量取决于数组大小(方法参数)。当我调用该方法时,我希望在继续之前确保所有承诺都得到了履行。我宁愿在所有承诺兑现之前不回来。
请看一下最后五行代码
依赖
var promiseAll = require('gulp-all');
var del = require('del');
var deleteEmpty = require('delete-empty');
一饮而尽|删除空
辅助方法
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 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()
}
});
});
}
});
}
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- 一个承诺换多个承诺-并发问题
- node.js http服务器并发问题
- JavaScript (缺乏) 并发[线程] (非)问题
- 如何在尝试打印存在警报的URL时解决并发问题
- 从Chrome扩展在页面中注入Javascript:并发问题
- Javascript和并发问题
- springmvchibernate restful(并发)问题
- 如何在不并发问题的情况下替换PHP文件的内容
- Javascript并发问题——我需要一种方法来检查文件加载是否已经完成