通过异步回调函数传递不同版本的变量

Pass different versions of variable through asynchronous callback functions

我在处理一些异步数据库查询时遇到问题。我正在为 Node.js 使用异步库。在它命中 add() 函数之前,我有一些代码形成一个对象。在我的代码中,我有一个循环执行多次创建对象。

for(var i = 0; i < 10; i++){ 
    var obj.id = i + '_idstring';
    add(obj);
}

如您所见,每个对象都略有不同。我需要在我的数据库中执行查找以查看该对象是否已经存在(第一个瀑布函数),如果不存在,则将其添加到我的数据库中(第二个瀑布函数)。我的问题是,loaObj.id 总是等于 10_idstring。这是我如何通过回调传递对象的问题吗?我该如何处理?

function add(loaObj) {
    async.waterfall([
        function(loaObj, callback) {
            var sql = "";
            connection.query(sql, function(error, results, fields) {
                callback(error, results, loaObj);
            });
        },
        function(results, loaObj, callback) {
            if (results.length > 0) {
                sendMessage();
            } else {
                var sql = "";
                connection.query(sql, function(error, results, fields) {
                    callback(error, loaObj);
                });
            }
        }
    ], function(err, loaObj) {
        console.log(err);
        if (err) {
            sendMessage();
        } else {
            sendMessage();
        }
    });
}

因为您使用的是对象,它将由 "copy of a reference" 传递,然后 obj.id 将被每个循环覆盖,它将稳定到 10_idstring - 循环停止的地方-. 一种简单的解决方案是每次都传递新对象,如下所示:

for(var i = 0; i < 10; i++){ 
  add({id: `${i}_idstring`});
}