我在处理一些异步数据库查询时遇到问题。我正在使用 Node.js 的异步库。我有一些代码在调用 add() 函数之前形成一个对象。在我的代码中,我有一个循环执行多次创建对象。
for(var i = 0; i < 10; i++){
var obj.id = i + '_idstring';
add(obj);
}
正如您所看到的,每个对象都略有不同。我需要在数据库中执行查找,以查看该对象是否已存在(第一个 waterfall 函数),如果不存在,请将其添加到我的数据库中(第二个 waterfall 函数)。我的问题是,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();
}
});
}
最佳答案
因为您使用的是对象,它将通过“引用的副本”传递,所以 obj.id
将在每个循环中被覆盖,并且它将稳定为 10_idstring
-循环停止的地方-。
一个简单的解决方案是每次都传递新对象,如下所示:
for(var i = 0; i < 10; i++){
add({id: `${i}_idstring`});
}
关于javascript - 通过异步回调函数传递不同版本的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45516840/