父范围内的variables不会在匿名函数中被修改
我使用opentok SDK进行video聊天,我需要创build会话。 这是非常简单的,这部分工作正常。 这一切都在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
保留它的初始值''(空string),而不是它被分配给的sessionId
。 帮帮我?
这不是一个关于范围的问题。 这是关于asynchronous性。 您的匿名函数将更新父函数中的session
variables; 但是因为你的匿名函数是asynchronous的,所以在 generateSession
返回之后就会发生。
相反,您需要修改generateSession
来接受callback,并在完成后执行callback(传递生成的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. });
这与我如何从asynchronous调用返回响应完全相同的问题? (在这种情况下,它是asynchronous的“成功”callback); 可能有更合适的重复,但我找不到一个:(但它仍然是有益的阅读通过它虽然。
createSession
是一个asynchronous函数。 它的callback在generateSession
完成一段时间之后才会执行。 你需要传递一个callback,而不是:
function generateSession(cb){ opentok.createSession(cb); } generateSession(function(err, sessionId) { if (err) throw err; // use sessionId });