我创建了一个创建会话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
答案 0 :(得分: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? data
的第二个参数sendToUser
似乎也可以在回调函数中使用。只需写下sendToUser(sessionId, data)
。