蓝鸟承诺每个返回的结果

即时通讯使用蓝鸟来链接nodejs中的几个幽灵相关的任务。 我的问题是,最后在链中得到的parameter passing给每个作为结果,而不是scrapDomain函数的结果

我已经搞了两天了,请帮忙吗?

承诺链:

Promise .each(domains, function(domain) { return ensureDir(domain[0]) }) .each(ssHome) .each(function(domain){ return scrapDomain(domain).then(function(results){ return results }) }) .then(function(results){ console.log(results) }) 

请参阅http://bluebirdjs.com/docs/api/promise.each.html

解决原始数组未经修改,此方法是为了用于副作用。 如果迭代器函数返回一个promise或一个thenable,那么在继续下一次迭代之前,等待promise的结果。

我想你想使用http://bluebirdjs.com/docs/api/promise.map.html

使用mapSeries为此devise的mapSeries

 Promise .mapSeries(domains, function(domain) { return ensureDir(domain[0]) }) .mapSeries(ssHome) .mapSeries(scrapDomain) .mapSeries(console.log); 

虽然,我个人不会这样写代码。 首先, mapSeriesmapSeries都是按顺序执行的,而map等其他函数同时执行这个函数。

其次,在这个用例中,每一步都要等待上一步,在你的情况下这是不必要的。 相反,我会这样写:

 const scrape = Promise.coroutine(d => { // Promise.coroutine is bluebird specific let dir = ensureDir(d[0]); let home = yield ssHome(dir); let results = yield scrapDomain(home); return results; }); 

然后做:

 let results = Promise.map(domains, scrape); 

哪个可以让你做到:

 results.then(items => console.log(items));