我正在使用 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/