Javascript 如何将一个对象数组映射为一个Q值数组
我似乎无法理解这一点。我有一个职位列表,我想把它变成一系列的承诺,然后我想收集。它不起作用,导致空数组(例如[null,null]) 我的解决方案 从下面的答案来看,这就是我要说的 在上面的尝试中,reduce是指在将想法返回到UI之前,我将位置与想法关联起来的点。但是,由于我没有积累任何东西,所有这些都有效(可能更好): 当您这样做时:Javascript 如何将一个对象数组映射为一个Q值数组,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,我似乎无法理解这一点。我有一个职位列表,我想把它变成一系列的承诺,然后我想收集。它不起作用,导致空数组(例如[null,null]) 我的解决方案 从下面的答案来看,这就是我要说的 在上面的尝试中,reduce是指在将想法返回到UI之前,我将位置与想法关联起来的点。但是,由于我没有积累任何东西,所有这些都有效(可能更好): 当您这样做时: ...).then(function(noop) { // the position has it's data, invoke save which
...).then(function(noop) {
// the position has it's data, invoke save which also returns a promise
promise = Position.qCreate(newPosition)
});
它当时不会被调用,因为它是一个异步调用,所以会得到null数组
从函数返回null
。promise
变量的所有赋值都在异步回调中完成,这将在映射函数返回后发生
您需要做的是使用then
进行链接:计算setDirectionByName
和setsecuritybycker
,然后当这两个(全部)都完成时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);
});
})
什么是
Position
,它的setXY
方法返回承诺的值是什么?什么是“减少迭代”?你的承诺都会同时得到执行,而放弃这些承诺几乎是没有意义的。我知道我所做的是错误的,但我想我会与之斗争,而不是直截了当地要求。我从未想过从地图上返回Q.all。请注意,您并不是在返回Q.all()
,而是在Q.all()
的结果上调用.then()
——这将返回对其回调结果(Position.qCreate()
)的承诺!(疯狂筑巢这一切是:-)是的-没错。再次感谢你-在嵌套和抽象之间,保持头脑清醒是很困难的。
...).then(function(noop) {
// the position has it's data, invoke save which also returns a promise
promise = Position.qCreate(newPosition)
});
var promise = null
Q.all(…)
return promise
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);
});
})