我正在使用opentok SDK进行视频聊天,我需要创建会话。很简单,这部分工作很好。这都是在服务器端Node.js中完成的。
问题是--这主要是因为我仍然没有得到var作用域(尤其是匿名函数和闭包)--我在我的匿名函数中有一个我想要访问的值(最好是通过将它赋给另一个var,一个在它的父作用域中),但是不能!
类似这样的事情:
function generateSession(session){
var session='';
opentok.createSession(function(error, sessionId){
if (error) {
throw new Error("Session creation failed.");
}
session = sessionId;
});
return session;
}
session
保留它的初始值“”(空字符串),而不是分配给它的sessionid
。救命?
这不是关于范围的问题。这是关于异步性的。您的匿名函数将更新父函数中的session
变量;但是,由于匿名函数是异步的,它将在generatesession
返回之后发生。
相反,您需要修改generateSession
以接受回调,并在完成后执行回调(传递生成的session
);
function generateSession(session, cb){
opentok.createSession(function(error, sessionId){
if (error) {
throw new Error("Session creation failed.");
}
cb(sessionId);
});
}
generateSession(blahblahblah, function (session) {
// Access session here.
});
这与如何从异步调用返回响应的问题完全相同?(在这种情况下,“success”回调是异步的);可能有更合适的副本,但我找不到一个:(。不过通读一下还是有好处的。
createSession
是一个异步函数。直到GenerateSession
完成后一段时间才执行其回调。您需要传入回调:
function generateSession(cb){
opentok.createSession(cb);
}
generateSession(function(err, sessionId) {
if (err) throw err;
// use sessionId
});