我是 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/