全局变量和异步数据

时间:2013-08-13 00:37:41

标签: javascript sockets websocket global-variables

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

1 个答案:

答案 0 :(得分:0)

问题是socket.on在执行有问题的行时完成(或调用回调)。这是因为on异步操作:它立即返回 并在收到数据时“稍后”调用回调。只有运行on回调后才能使用

以下是执行 order 的示例,其中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使得链接一堆依赖的异步操作变得非常容易。)