蓝鸟承诺每个返回的结果
即时通讯使用蓝鸟来链接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的结果。
使用mapSeries
为此devise的mapSeries
:
Promise .mapSeries(domains, function(domain) { return ensureDir(domain[0]) }) .mapSeries(ssHome) .mapSeries(scrapDomain) .mapSeries(console.log);
虽然,我个人不会这样写代码。 首先, mapSeries
和mapSeries
都是按顺序执行的,而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));