我正在使用nodejs。
如何确保for循环完全完成运行,以便可以返回填充了一次通过/失败记录的msgList?
在这种情况下,是否有使用回调或诺言的正确方法?
现在我得到的是:
结果:
{
"message": "Handling PUT requests to /api/micontact.",
"result": []
}
代码:
exports.updateBooks = (req, res) => {
var books = req.body.books;
var createdBy = constant.defaultUsername;
var currentDate = converter.formatDate(new Date());
let msgList = [];
for (var i = 0; i < books.length; i++) {
let msgArr = "Record index: " + i + " ";
var params = [];
var book = books[i];
var bookId = globUtil.checkforUndefined(book.bookId);
var title = globUtil.checkforUndefined(book.title);
if(bookId === null) {
msgArr += message.bookId ;
msgList.push(msgArr)
}
params.push(title, bookId);
pool.open(connString, function (err, db) {
if (err) {
msgArr += err;
msgList.push(msgArr);
return;
}
db.query(query.sqlUpdate, params, function (error, result, info) {
if (error) {
msgArr += error;
msgList.push(msgArr);
return;
}
msgArr += "SUCCESS";
msgList.push(msgArr);
});
db.close();
});
}
res.status(200).json({
message: format(message.defaultMsg, "PUT", constant.moduleUrl),
result: msgList
});
};
答案 0 :(得分:0)
您可以按照以下方式使用promise,对您的代码进行适当的更改。有关承诺link
的更多信息var fetchData = function () {
return new Promise(function (resolve, reject) {
pool.open(connString, function (err, db) {
if (err) {
reject();
}
db.query(query.sqlUpdate, params, function (error, result, info) {
if (error) {
reject();
}
resolve();
});
db.close();
});
});
};
exports.updateBooks = (req, res) => {
...
var count = 0;
for (var i = 0; i < books.length; i++) {
fetchData(i).then(function(result){
count+=1;
if(count == books.length){
//send response
res.status(200).json({
message:format(message.defaultMsg,"PUT",constant.moduleUrl),
result: msgList
});
}
}).catch(function(err){
//send error
})
}
};
答案 1 :(得分:0)
发生这种情况是因为NodeJS异步工作并使用回调进行通信,您可以使用以下方式来满足您的要求:
exports.updateBooks = (req, res) => {
var books = req.body.books;
var createdBy = constant.defaultUsername;
var currentDate = converter.formatDate(new Date());
let msgList = [];
for (var i = 0; i < books.length; i++) {
let msgArr = "Record index: " + i + " ";
var params = [];
var book = books[i];
var bookId = globUtil.checkforUndefined(book.bookId);
var title = globUtil.checkforUndefined(book.title);
if(bookId === null) {
msgArr += message.bookId ;
msgList.push(msgArr)
}
params.push(title, bookId);
pool.open(connString, function (err, db) {
if (err) {
msgArr += err;
msgList.push(msgArr);
return;
}
db.query(query.sqlUpdate, params, function (error, result, info) {
if (error) {
msgArr += error;
msgList.push(msgArr);
return;
}
msgArr += "SUCCESS";
msgList.push(msgArr);
res.status(200).json({
message: format(message.defaultMsg, "PUT", constant.moduleUrl),
result: msgList
});
});
db.close();
});
}
};