全局变量和异步数据
Global variables and asynchronous data
我的全局变量n
:有问题
var n ;
socket.on('connect', function(){
socket.on('news', function (mensaje) {
n = mensaje.data;
$('#string').val(n); // show data
});
$('#string1').val(n); // I can't see anything, why?
...});
//
首先,我的全局变量n只显示在socket.on
内部,但我希望它显示该函数。
问题是,当有问题的行执行时,socket.on没有完成(或调用回调)。这是因为on
是异步操作:它立即返回,并在收到数据时"稍后"调用回调。只有在运行了on
回调之后,才能使用数据。
以下是执行顺序的示例,其中1在2之前、3之前"运行",等等:
// 1
var n;
socket.on('connect', function(){
// 2
socket.on('news', function (mensaje) { // "on callback"
// 4
n = mensaje.data;
// 5
$('#string').val(n);
});
// 3 - note that this occurs *before* 4 & 5
// which run in the asynchronous callback
// so n has not been assigned yet
$('#string1').val(n);
})
解决方案是仅在分配变量后使用该变量,这只有在on
回调运行后才能保证。(Promises使链接一堆依赖的异步操作变得非常容易。)
相关文章:
- 异步获取数据使用JavaScript同步获取数据
- 从要使用Protractor测试的服务器异步加载的动态数据列表的列表
- 将数据发布到iframe是同步还是异步
- 如何处理异步获取的数据
- Javascript/JQuery处理并发/异步调用和数据竞争
- 在我的案例中,如何获取异步数据
- 将数据注入异步回调(使用 node.js)
- 嵌套异步函数未及时返回数据的问题
- 如何将状态对象/数据传递给(异步)ajax 回调
- 如何等到异步回调完成后才能使用检索到的数据
- 使用从内部函数返回的异步数据对外部函数返回promise
- 异步循环使用递归:如何访问推送数组数据
- 在呈现“页面”之前异步获取数据
- 如何访问回调函数之外的异步angularjs服务数据
- 余烬数据异步关系的聚合
- 从Json数据异步加载谷歌地图标记
- 为什么Javascript检索数据异步(ajax,..),而PHP同步(mysql_query)
- 使用存储中的数据异步请求
- 如何在 AngularJS 中将数据异步从模型返回到控制器
- 想创建一个js插件,发送大量的数据异步到另一个服务器