javascript - 如何使用 NodeJs 异步更新数据库中的数组数据?

标签 javascript node.js asynchronous async.js

我是 NodeJs 新手,我发现 JS 的非阻塞和异步特性非常难以理解和处理,
我有一段代码应该迭代数组
对于每次迭代,我都应该进行数据库更新。

有人可以提供异步库函数的正确实现并帮助修复我的代码吗?

代码示例 -

function updateFunction(conn, requestBody, callback) {

    let arr = [];

    async.each(requestBody.arr, function(item, callback) {
        let sqlData = []
        let columns = "";

        if(item.columnData != null){
            sqlData.push(item.columnData);
            columns += "`columnName` = ?,";
        }

        if(columns != ''){
            columns = columns.substring(0,columns.length-1);

            let sqlQuery = 'UPDATE someTable SET '+columns
            +' WHERE id = "' + item.id + '"';

            conn.query(sqlQuery, sqlData, function (err, result) {
                if (err) {
                    return callback(err, false);
                }
            })
        }
        else{
            return callback(null, false);
        }
        columns = "";
        sqlData = [];
    },
    function(err, results) {
    //Code never reaches here, don't know why       
     if (err) {
            return callback(err, false);
        }
        else{
           return callback(null, true);
        }
    });
} // END 

最佳答案

在数据库查询调用期间,如果查询成功,则不会调用您的回调,因此导致您的代码永远不会到达最终回调。

您需要在 if (err) { return callback(err); 之后添加另一个 return 语句。 } 让异步知道您的数据库查询已完成。

还有一件事,according to the docs,异步每个方法的最终回调不会在其回调中调用结果。

A callback which is called when all iteratee functions have finished, or an error occurs. Invoked with (err).

因此,您不需要将值传递到 iteratee 函数内的回调语句中。

修改您的代码来执行此操作,它将起作用。

conn.query(sqlQuery, sqlData, function (err, result) {
    if (err) {
        return callback(err);
    }

    return callback(null);
})

希望这有帮助。

关于javascript - 如何使用 NodeJs 异步更新数据库中的数组数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54733620/

相关文章:

unit-testing - react 堆项目 : wait while broadcaster finish

python - KeyError:kafka.生产者.record_accumulator.RecordBatch

node.js - 使用 node.js gmail api 列出收件箱消息

node.js - 如何在 NodeJS Sequelize 中按查询计算组

javascript - 了解 javascript 中的回调和返回函数

javascript - 在没有单例模式的情况下通过 require js 共享原型(prototype)实例?

node.js - “require”未在 Node 检查器的 repl 的控制台选项卡中定义

javascript - Node.js:WAITING需求

javascript - JQuery 自动完成自定义查找功能

javascript - 如何使用 JQuery 在 2 个元素之间画一条线并刷新该线?