Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将一个对象数组映射为一个Q值数组_Javascript_Node.js_Promise_Q - Fatal编程技术网

Javascript 如何将一个对象数组映射为一个Q值数组

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

我似乎无法理解这一点。我有一个职位列表,我想把它变成一系列的承诺,然后我想收集。它不起作用,导致空数组(例如[null,null])

我的解决方案 从下面的答案来看,这就是我要说的

在上面的尝试中,reduce是指在将想法返回到UI之前,我将位置与想法关联起来的点。但是,由于我没有积累任何东西,所有这些都有效(可能更好):

当您这样做时:

...).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);
    });
})