javascript - Node.js 在函数之间异步传递变量

标签 javascript node.js asynchronous

我正在使用 node.js 迈出第一步,我在以异步方式传递变量时遇到了这个问题。我用这段代码来创建 Facebook 用户:

req.tmpPassport = {};
var fb = new fbgraph.Facebook(accessToken, 'v2.2');
function initUser() {
    fb.me(function (err, me) {
        req.tmpPassport.me = me;
        console.log(req.tmpPassport.me) // works
    });
}

console.log(req.tmpPassport.me) // not working -> undefined var

我试图弄清楚为什么第二个日志不起作用,并且我最终阅读了有关同步和异步函数的内容,因此为了尝试实现我所读的内容,我尝试提出使用回调的解决方案,但没有成功。 我最后一次尝试是这样的:

req.tmpPassport = {};
var fb = new fbgraph.Facebook(accessToken, 'v2.2');
function initUser() {
    fb.me(function (err, me) {
        req.tmpPassport.me = me;
    });
    fb.my.events(function (err, events) {
        //console.log(events);
        req.tmpPassport.events = events;

    });
    fb.my.friends(function (err, result) {
        req.tmpPassport.results = result;
    });
}
function passUser(){
    console.log(req.tmpPassport);
    return req.tmpPassport;
}
cp.exec(initUser, passUser);

但它不起作用... 我实际上想要实现的目标是使用我的express router var渲染这个对象,如下所示:

   router.get('/welcome', securePages, function(req, res, next){
        res.render('welcome', {title:'Welcome to aDating', user:req.tmpPassport});
    })

但我无法弄清楚如何仅在创建后传递该对象...请帮忙吗?

最佳答案

完成某些异步任务时链接函数调用的方法是处理此问题的一种方法。

查看第一段代码,它将被重写如下:

req.tmpPassport = {};
var fb = new fbgraph.Facebook(accessToken, 'v2.2');
function initUser() {
    fb.me(function (err, me) {
        console.log(req.tmpPassport.me) // works
        req.tmpPassport.me = me;

        // triggers execution of the next step
        post_populating_passport();
    });
}

function post_populating_passport() {
    // this function is only executed after the callback from the async call
    console.log(req.tmpPassport.me);
}

关于javascript - Node.js 在函数之间异步传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486565/

相关文章:

javascript - jQuery 代码太冗长,希望获得有关如何使其更短的指示

javascript - 与 node.js 中的 res.render() 一起使用的 ejs 文件中的 "document is not defined "错误?

javascript - 全局 npm 依赖项 Express 将无法运行

c++ - 使用带有 O_DIRECT 标志的 libaio 读取文件

javascript - 更新从 mongo 脚本打印到 StdOut(控制台)的 %

javascript - 使用 VueJS prop 作为数组映射的变量

javascript - Node.js:与速度较慢的第三方合作

javascript - promise 永不兑现

javascript - jQuery 检索 ID

node.js - 将数组值存储为整数