我似乎无法解决这个问题。我有一个职位清单,我想将其变成一系列的承诺,然后我要收集这些承诺。它不起作用,positionPromises会导致一个null数组(例如[null,null])
var positionPromises = _.map(positions, function(position) {
var newPosition = Position({
'weight': 1
,'ideaId': idea.id
})
var promise = null
Q.all([
// asynchronous sets (each does a db lookup)
newPosition.setDirectionByName(position.direction)
, newPosition.setSecurityByTicker(position.ticker)
]).then(function(noop) {
// the position has it's data, invoke save which also returns a promise
promise = Position.qCreate(newPosition)
}).done()
return promise
console.log("NEVER GET HERE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
}) // _.map
console.log(positionPromises)
positionPromises.reduce(function(noop, positionPromise){
console.log('Reduce iteration')
positionPromise.then(function(position) {
console.log('THEN')
})
})
从下面的答案中,这就是我要做的...
减少上述尝试的目的是在将其返回到UI之前,将位置与该想法相关联。但是由于我没有积累任何东西,所以一切正常(可能更好):
var positionPromises = _.map(positions, function(position) {
var newPosition = Position({
'weight': 1
,'ideaId': idea.id
})
return Q.all([
newPosition.setDirectionByName(position.direction)
, newPosition.setSecurityByTicker(position.ticker)
]).then(function(noop) {
//newPosition.setIdea(idea)
return Position.qCreate(newPosition)
})
}) // _.map
Q.all(positionPromises).then(function(positions){
console.log('RESULTS of POSITION Promises')
idea.positions = positions
res.send(idea)
})
var promise = null Q.all(…) return promise
您在返回null
从功能在这里。对该promise
变量的所有分配均在异步回调中完成,这将在返回映射函数之后发生。
相反,您需要做的是then
用于链接:计算setDirectionByName
和setSecurityByTicker
,然后计算两个(全部)都完成qCreate
一个承诺,然后产生该承诺的值:
var positionPromises = _.map(positions, function(position) {
var newPosition = Position({
'weight': 1,
'ideaId': idea.id
});
return Q.all([
newPosition.setDirectionByName(position.direction),
newPosition.setSecurityByTicker(position.ticker)
]).then(function() {
return Position.qCreate(newPosition);
});
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句