如何通过Bluebirds .map携带一些数据?

时间:2015-06-30 21:45:51

标签: node.js promise bluebird

我正在使用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(),但我从未设法让它发挥作用。

2 个答案:

答案 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的回答中所述。