node.js在函数之间异步传递变量

时间:2015-07-18 00:24:51

标签: 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);

但它不起作用...... 我实际上试图实现它用我的快速路由器var渲染这个对象,如下所示:

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

但我无法弄清楚如何在创建之后传递此对象...请帮助吗?

2 个答案:

答案 0 :(得分:3)

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

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

string[i] = digits[ rand() % (sizeof(string) - 1)]; // Also removed extraneous 0

答案 1 :(得分:0)

Node.js是一种异步编程语言,是其核心的基本概念。您需要使用函数回调(不是一个好的做法)或可用于异步流的npms实用程序。