Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 如何使for循环在继续下一次迭代之前等待db promise完成?_Javascript_Ajax - Fatal编程技术网

Javascript 如何使for循环在继续下一次迭代之前等待db promise完成?

Javascript 如何使for循环在继续下一次迭代之前等待db promise完成?,javascript,ajax,Javascript,Ajax,我目前使用node.js sequalize从数据库中提取数据,在前端我使用ajax请求。因此,我发送带有json对象的ajax请求来编辑数据库。但是,当我试图编辑数据库时,foor循环不会等到承诺完成后才进入下一次迭代。我尝试将承诺发送到数组,并使用Bluebird函数Promise。每个承诺都是在发送到数组之前执行的。我该怎么做才能在当前承诺完成之前暂停for循环 for(var i=0; i<recordsJSON.length; i++) { var recordJSON

我目前使用node.js sequalize从数据库中提取数据,在前端我使用ajax请求。因此,我发送带有json对象的ajax请求来编辑数据库。但是,当我试图编辑数据库时,foor循环不会等到承诺完成后才进入下一次迭代。我尝试将承诺发送到数组,并使用Bluebird函数Promise。每个承诺都是在发送到数组之前执行的。我该怎么做才能在当前承诺完成之前暂停for循环

for(var i=0; i<recordsJSON.length; i++)
{
    var recordJSON = recordsJSON[i];

    Record.nullPayeeId(recordJSON.id).then(function()
    {
        return Record.getOneRecord(recordJSON.id);
    })
    .then(function(record)
    {
        var virtualPayeeId = record.virtualPayeeId;
        return VirtualPayee.deletePayee(virtualPayeeId);
    })
    .then(function()
    {
        var category = parseInt(recordsJSON[i].category);
        var subcategory = parseInt(recordsJSON[i].subcategory);

        return VirtualPayee.insertPayee({
            payee: recordJSON.payee,
            description: recordJSON.description,
            categoryId:category,
            subcategoryId:subcategory
        })
    })
}

for(var i=0;i因为您是指Bluebird,所以可以使用来帮助您序列化内容:

Promise.mapSeries(recordsJSON, function(recordJSON) {
    return Record.nullPayeeId(recordJSON.id).then(function () {
        return Record.getOneRecord(recordJSON.id);
    }).then(function(record) {
        var virtualPayeeId = record.virtualPayeeId;
        return VirtualPayee.deletePayee(virtualPayeeId);
    }).then(function() {
        var category = parseInt(recordJSON.category);
        var subcategory = parseInt(recordsSON.subcategory);

        return VirtualPayee.insertPayee({
            payee: recordJSON.payee,
            description: recordJSON.description,
            categoryId: category,
            subcategoryId: subcategory
        });
    });
}).then(function (results) {
    // results here in oder
}).catch(function (err) {
    // error here
});
如果要手动序列化它们,则可能需要在承诺中使用
.reduce()
模式。您可以在此处阅读该模式:


既然您指的是蓝鸟,您可以使用来帮助您序列化内容:

Promise.mapSeries(recordsJSON, function(recordJSON) {
    return Record.nullPayeeId(recordJSON.id).then(function () {
        return Record.getOneRecord(recordJSON.id);
    }).then(function(record) {
        var virtualPayeeId = record.virtualPayeeId;
        return VirtualPayee.deletePayee(virtualPayeeId);
    }).then(function() {
        var category = parseInt(recordJSON.category);
        var subcategory = parseInt(recordsSON.subcategory);

        return VirtualPayee.insertPayee({
            payee: recordJSON.payee,
            description: recordJSON.description,
            categoryId: category,
            subcategoryId: subcategory
        });
    });
}).then(function (results) {
    // results here in oder
}).catch(function (err) {
    // error here
});
如果要手动序列化它们,则可能需要在承诺中使用
.reduce()
模式。您可以在此处阅读该模式:


非常感谢。这对我帮助很大。我以为mapSeries只映射了承诺。如果不是你,我永远不会看到。再次感谢!非常感谢。这对我帮助很大。我以为mapSeries只映射了承诺。如果不是你,我永远不会看到。再次感谢!