通过异步回调函数传递不同版本的变量
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`});
}
我在处理一些异步数据库查询时遇到问题。我正在为 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`});
}