首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在查询回调之外访问节点js中的变量

如何在查询回调之外访问节点js中的变量
EN

Stack Overflow用户
提问于 2018-08-29 22:20:19
回答 1查看 1.5K关注 0票数 0

我正在用node.js做一个应用程序,我只停留在一个地方。我运行一个查询,然后我想将这些查询结果放入一个数组中并返回该数组。问题是它不能在查询回调之外访问该数组。我的代码如下所示。

代码语言:javascript
复制
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。但这也没有起作用。任何帮助都将受到高度的感谢。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-09-03 18:56:22

基本上,由于nodejs的异步特性,您尝试做的事情不会给您带来期望的结果。您的控制台在循环之前运行(由于db操作而是异步的)。你可以使用异步库中的瀑布方法,并在初始化“电子邮件”后尝试如下所示:

代码语言:javascript
复制
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));
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52079736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档