最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何使用NodeJs Async更新数据库中的数组数据?

IT培训 admin 10浏览 0评论

如何使用NodeJs Async更新数据库中的数组数据?

我是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, async每个方法的最终回调都不会在其回调中调用结果。

当所有iteratee函数完成或发生错误时调用的回调。用(错误)调用。

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

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

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

    return callback(null);
})

希望这可以帮助。

如何使用NodeJs Async更新数据库中的数组数据?

我是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, async每个方法的最终回调都不会在其回调中调用结果。

当所有iteratee函数完成或发生错误时调用的回调。用(错误)调用。

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

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

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

    return callback(null);
})

希望这可以帮助。

发布评论

评论列表 (0)

  1. 暂无评论