一个无极的多承诺 - 的并发性问题(One Promise for Multiple Promise

2019-09-28 02:52发布

在我的“gulpfile.js”方法“myMethod的”我要创建多个承诺。 的量取决于该阵列的尺寸(方法参数)。 当我打电话的方法我想确保所有履行诺言之前,我继续。 我宁愿得到满足所有的承诺之前,不会返回。

请看看代码的最后五行。

依赖

var promiseAll = require('gulp-all');
var del = require('del');
var deleteEmpty = require('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);
}

Answer 1:

在的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()
                    }
                });
            });
        }
    });
}


文章来源: One Promise for Multiple Promises - Concurrency Issue