【问题标题】:mongoose - updatng inside of a loop - async issue猫鼬 - 在循环内更新 - 异步问题
【发布时间】:2018-01-10 19:57:19
【问题描述】:

我发现了类似的问题,但我无法让它发挥作用。我知道问题在于节点是异步的,但我又一次无法弄清楚。

这是有问题的代码:

var count = 1;

    for (var i = 0; i < ids.length; i++) {
        var id = ids[i];
        console.log(count++);
        Page.findById(id, function (err, page) {
            page.sorting = count;
            page.save(function (err) {
                if (err)
                    console.log(err); 
            });
        });
    }

所以,console.log(count++) 输出预期结果(1,2,3,我确实有 3 条记录要迭代,虽然总共有 4 条,所以这是完全正确的)但最终结果始终是 4,所以page.sorting = count 总是4,我理解这是因为异步但不知道如何使它工作?

【问题讨论】:

  • 你可以在普通函数中重写你的 for 循环,比如: function count(i){ if(i

标签: javascript node.js express asynchronous mongoose


【解决方案1】:

注意:由于count 似乎等于i + 1,您可以跳过使用附加变量,而直接使用i

使用函数闭包

var count = 1;

for (var i = 0; i < ids.length; i++) {
    var id = ids[i];
    count++;
    (function(count) {
        Page.findById(id, function (err, page) {
            page.sorting = count;
            page.save(function (err) {
                if (err)
                    console.log(err); 
            });
        });
    })(count);
}

【讨论】:

  • 感谢朋友,关闭工作,我自己应该想到的。第一个示例抛出错误。
  • 第一个例子是对的,我已将其从答案中删除。
猜你喜欢
  • 2018-03-09
  • 2020-10-16
  • 2021-08-19
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2021-04-20
  • 2018-10-17
相关资源
最近更新 更多