【问题标题】:Global variables and asynchronous data全局变量和异步数据
【发布时间】:2013-08-13 00:37:40
【问题描述】:

我的全局变量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 内部,但我希望它显示该函数。

【问题讨论】:

    标签: javascript sockets websocket global-variables


    【解决方案1】:

    问题是当有问题的行执行时,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 回调运行后才能保证。 (Promise 使得链接一堆依赖的异步操作变得非常容易。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      相关资源
      最近更新 更多