mongoose - 循环内部更新 - 异步问题

时间:2017-08-03 09:37:00

标签: javascript node.js express asynchronous mongoose

我发现了类似的问题,但我无法让它发挥作用。我理解问题是节点是异步的,但我再一次无法弄明白。

这是有问题的代码:

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条,所以这是完全正确的)但最终结果总是{{ 1}},所以4总是4,我理解是因为异步但不知道如何使它工作?

1 个答案:

答案 0 :(得分:0)

注意:由于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);
}