Meteor.call()中的Array.push()返回索引号数组,而不是ids

时间:2016-06-23 04:52:21

标签: javascript arrays meteor

我正在forEach函数中执行Meteor方法,并将每个方法的结果(一个新的id)推送到一个数组中,然后用于其他目的。我可以看到每个新id已创建(每个方法的result)。但是,控制台返回的是一个索引号数组,而不是一个新的id数组。

编辑编辑以解决以下问题 在事件处理程序中,选择了两个文档:

var selectionsFinal = [];
selections.forEach(function(v, selectionsFinal) {
    Meteor.call('copy', v, function(error, result) {
        if(error) {
            console.log(error);
        } else {
            console.log("Result: ", result); //properly returns new id
            selectionsFinal.push(result);
            console.log("SelectionsFinal: ", selectionsFinal); // properly returns array of 2 new ids
        }
    });
    console.log("SelectionsFinal: ", selectionsFinal); //should return array of new ids, returns []
});
console.log("Selections Final: ", selectionsFinal); //should return array of new ids, returns []

方法

copy: function(v) {
    check(v, String);

    var valuation = Valuations.findOne({_id:v},{fields:{_id:0});
    return Valuations.insert(valuation)
}

1 个答案:

答案 0 :(得分:0)

您的模式将非常缓慢,正如您已经发现的那样,难以调试。由于服务器往返次数众多,不推荐使用Meteor.call()循环。

而不是:

var selectionsFinal = [];
selections.forEach(function(v, selectionsFinal) {
    Meteor.call('copy', v, function(error, result) {})
});

执行:

Meteor.call('bulkCopy',selections,function(error,result){});

数组是否在方法本身中推送,然后返回整个数组。