我正在用node.js做一个应用程序,我只停留在一个地方。我运行一个查询,然后我想将这些查询结果放入一个数组中并返回该数组。问题是它不能在查询回调之外访问该数组。我的代码如下所示。
var emailsToReturn = [];
emails.forEach(( email, index ) => {
var msgId = email.message_id;
//fetch attachments against this attachment
var fetchAttachments = `SELECT * FROM email_attachments WHERE message_id='${msgId}'`;
connection.query(fetchAttachments, (err, attachmentsResult)=>{
email['attachments'] = attachmentsResult;
emailsToReturn.push(email); // this show desired results here.
});
});
console.log(JSON.stringify(emailsToReturn, null, 4)); // this shows empty array here outside of query callback.
我知道这是范围问题,我也尝试使用global
。但这也没有起作用。任何帮助都将受到高度的感谢。谢谢!
发布于 2018-09-03 18:56:22
基本上,由于nodejs的异步特性,您尝试做的事情不会给您带来期望的结果。您的控制台在循环之前运行(由于db操作而是异步的)。你可以使用异步库中的瀑布方法,并在初始化“电子邮件”后尝试如下所示:
const async = require("async");
var emailsToReturn = [];
async.waterfall([function(cb){
emails.forEach(( email, index ) => {
var msgId = email.message_id;
//fetch attachments against this attachment
var fetchAttachments = `SELECT * FROM email_attachments WHERE message_id='${msgId}'`;
connection.query(fetchAttachments, (err, attachmentsResult)=>{
email['attachments'] = attachmentsResult;
emailsToReturn.push(email); // this show desired results here.
if(index == emails.length - 1){
cb();
}
});
});
}],function(){
console.log(JSON.stringify(emailsToReturn, null, 4));
})
https://stackoverflow.com/questions/52079736
复制相似问题