我正在使用Blubird和Sequelize(在封面下使用Blubird)。
假设我的代码类似于:
Feed.findAll()
.map(function (feed) { // <---- this is what I'm interested in below
// do some stuff here
return some_promise_here;
})
.map(function (whatever) {
// What is the best way to access feed here?
})
....
我找到了一些暗示可能的解决方案的回复,但我无法完全理解它。
我尝试使用Promise.all()
,.spread()
,但我从未设法让它发挥作用。
答案 0 :(得分:2)
Feed.findAll()
.map(function (feed) { // <---- this is what I'm interested in below
// do some stuff here
return some_promise_here.then(function(result){
return { result: result, feed: feed};// return everything you need for the next promise map below.
});
})
.map(function (whatever) {
// here you are dealing with the mapped results from the previous .map
// whatever -> {result: [Object],feed:[Object]}
})
答案 1 :(得分:2)
这看起来与How do I access previous promise results in a .then() chain?非常相似,但是您在这里处理.map
调用并且似乎想要访问处理数组的相同索引的先前结果。在这种情况下,并非所有解决方案都适用,而closure似乎是最简单的解决方案:
Feed.findAll().map(function (feed) {
// do some stuff here
return some_promise_here.then(function (whatever) {
// access `feed` here
});
})
你也可以申请explicit pass-through,就像在@ bluetoft的回答中所述。