0

我创建了一个创建会话 ID 的函数

sessionId = ot.create_session(location, function(sessionId){
    console.log('The session ID is: ' + sessionId + '++++++++');
    return sessionId;
});

我可以从函数内部打印出会话 ID,但不能从函数外部访问它。


失败了,我想调用一个函数,将变量传递给函数

sessionId = ot.create_session(location, function(sessionId){
    console.log('The session ID is: ' + sessionId + '++++++++');
    sendToUser(sessionId);
});

但是,我需要 sendToUser 来获得更多数据,即先前声明的变量data

所以..我会这样做

sessionId = ot.create_session(location, function(sessionId){
    console.log('The session ID is: ' + sessionId + '++++++++');
    sendToUser(sessionId);
});

sendTo User(sessionId, data){
}

但是,这也不起作用

整个代码位于: http: //pastebin.com/CdV3rdh0

4

1 回答 1

1

以下片段:

setTimeout(function() {
   console.log("I'm first! Am I?"); // #2
}, 0);

console.log("Hahah, I'm first!"); // #1

会首先登录“哈哈,我是第一个!” 然后“我是第一个!我是吗?” 到控制台。为什么?

javascript 解释器首先从上到下运行任何函数,然后再执行其他任何操作(例如在零秒后执行回调函数)。这是因为 javascript 中的函数通常是非阻塞的,并且 IO 是异步完成的。这意味着, setTimeout 不会等到它作为第一个参数得到的匿名函数被执行,而只是注册函数回调以在零秒内执行。它在解释器到达文件末尾后立即执行。

因为ot.create_session需要将文件写入磁盘来创建会话,所以 sessionId 仅在回调函数内部可用,并且您永远无法从那里获取 sessionId,因为当回调函数被调用时,外部函数已经执行完毕整个上下文已经消失了:)

为什么你仍然需要回调函数外部的会话 id?datafor的第二个参数sendToUser似乎也可以在回调函数中使用。简单地写sendToUser(sessionId, data)

于 2012-07-21T03:01:28.723 回答