关于在Javascript方法中调用变量的另一篇文章

时间:2015-08-01 00:09:09

标签: javascript jquery variables scope promise

是的,我知道有很多很多很多关于Javascript变量的帖子以及如何正确访问它们及其范围等等。但是,我仍然无法弄清楚我的问题,即使花了一个几个小时试图用多个StackOverflow帖子和其他文章修复它。这是我的代码,因为到目前为止,让我们说part2.js:

var dataval = "";

callCgiFile().then(function(data) {
dataval = data;                          
alert(dataval);       //ALERTS data PROPERLY                                                                              
});                                                                                               
alert(dataval);         //DOESNT ALERT data at all    

我基本上有另一个Javascript文件,比如part1.js,如下所示:

function callCgiFile() {
return $.get('somecgifile.cgi');
}

并在我的part2.js文件中调用该函数,如图所示。我正在访问CGI文件中的数据,并尝试在函数外部访问它,但是,它根本不起作用。我老老实实地读过许多关于这个问题的其他类似问题,但没有一个问题对我有用。有什么办法可以解决我的问题吗?请告诉我!非常感谢你!

2 个答案:

答案 0 :(得分:0)

第二个警报将在第一个警报之前触发。 这里的原因不是变量范围,而是JavaScript的异步性质。 重构您的代码,以便您适应异步方式。

答案 1 :(得分:0)

首先尝试返回dataval .then(),然后在

中添加第二个.then()来处理dataval



var dataval = "";

function callCgiFile() {
  return $.get("https://gist.githubusercontent.com/guest271314/"
               + "6a76aa9d2921350c9d53/raw/"
               + "1864137bfd2eb62705bd0e71175048a28b3253e6/abc.txt");
}

callCgiFile()
.then(function(data) {
    dataval = data;
    alert(dataval); //ALERTS data PROPERLY
    // return `dataval` at first `.then`
    return dataval
})
// do stuff with `dataval` within second `.then`
.then(function(data) {
  alert(dataval)
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
&#13;
&#13;
&#13;