Node.js Promise.all().then()-then()在all()完成之前执行
在一个gulp任务中,我有以下代码创建一个gitAction承诺数组,这些承诺在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
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任务完成后完成吞咽任务。