我的全局变量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
内部,但我希望它显示该功能。
答案 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使得链接一堆依赖的异步操作变得非常容易。)