Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Promise.all().then()-then()在all()完成之前执行_Node.js_Git_Gulp_Es6 Promise - Fatal编程技术网

Node.js Promise.all().then()-then()在all()完成之前执行

Node.js Promise.all().then()-then()在all()完成之前执行,node.js,git,gulp,es6-promise,Node.js,Git,Gulp,Es6 Promise,在一个gulp任务中,我有以下代码创建一个gitAction承诺数组,这些承诺在Promise.all()语句中执行。之后,我在then()中调用另一个语句。但是,then()在git拉入all()之前被调用。有什么线索吗 var git = require('gulp-git'); var gitActionPromise = function(repo, url) { console.log('git action '+repo); var pathToRepo = './r

在一个gulp任务中,我有以下代码创建一个gitAction承诺数组,这些承诺在
Promise.all()
语句中执行。之后,我在
then()
中调用另一个语句。但是,
then()
在git拉入all()之前被调用。有什么线索吗

var git = require('gulp-git');
var gitActionPromise = function(repo, url) {
    console.log('git action '+repo);
    var pathToRepo = './repos/'+repo;

    if (fs.lstatSync(pathToRepo).isDirectory()) {
        return new Promise((resolve, reject) => {
            git.pull('origin', 'master', {cwd: pathToRepo}, function (err) {
                console.log(repo + " pull done!");
                if (err) {
                    console.log('error');
                    reject(err);
                } else {
                    console.log('ok');
                    resolve();
                }
            })
        })
    } else {
        return new Promise((resolve, reject) => {
            git.clone(url, {cwd: pathToRepo}, function (err) {
                console.log(repo + " clone done!");
                if (err) {
                    console.log('error');
                    reject(err);
                } else {
                    console.log('ok');
                    resolve();
                }
            })
        })
    }
};

var repos = package.repos || {};
var promises = Object.keys(repos).map(function(repo) {
    return gitActionPromise(repo, repos[repo]);
});

Promise.all(promises).then(
    console.log('something else')   <= this line was causing my issue
);                                     needed to be enclosed in function
var git=require('gulp-git');
var gitActionPromise=函数(repo,url){
console.log('git action'+repo);
var pathToRepo='./repos/'+repo;
if(fs.lstatSync(pathteropo.isDirectory()){
返回新承诺((解决、拒绝)=>{
pull('origin','master',{cwd:pathToRepo},函数(err){
日志(repo+“完成拉!”);
如果(错误){
console.log('error');
拒绝(错误);
}否则{
console.log('ok');
解决();
}
})
})
}否则{
返回新承诺((解决、拒绝)=>{
克隆(url,{cwd:pathToRepo},函数(err){
log(repo+“克隆完成!”);
如果(错误){
console.log('error');
拒绝(错误);
}否则{
console.log('ok');
解决();
}
})
})
}
};
var repos=package.repos | |{};
var promises=Object.keys(repo.map)(函数(repo){
回报承诺(回购,回购[回购]);
});
承诺。所有(承诺)。然后(

console.log('something other')您必须向
传递一个函数,然后

Promise.all(promises).then(function() {
    console.log('something else');
});

您的代码只是立即记录“其他内容”。

是否
var promises
等于一个数组?
Promise.all()
需要一个数组作为其参数。无需从承诺构造函数执行器函数返回任何内容。@Catfish:是的。map函数返回一个数组。是的。我太傻了!谢谢。此外,我使用事件流模块确保在git任务完成后完成吞咽任务。