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

另一篇关于在Javascript方法中调用变量的文章,javascript,jquery,variables,scope,promise,Javascript,Jquery,Variables,Scope,Promise,是的,我知道有很多很多关于Javascript变量以及如何正确访问它们和它们的作用域等的帖子。但是,我仍然无法解决我的问题,即使花了几个小时试图用多篇StackOverflow帖子和其他文章来解决这个问题。这是我的代码,比如说part2.js,到目前为止: var dataval = ""; callCgiFile().then(function(data) { dataval = data; alert(dataval); //

是的,我知道有很多很多关于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文件访问数据,并试图在函数之外访问它,但是,它根本不起作用。我真的读过很多关于这个问题的类似问题,但没有一个对我有用。我能做些什么来解决我的问题吗??请让我知道!非常感谢你

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

首先尝试返回
dataval
,然后(),再添加第二个
。然后()
以在内部处理
dataval

var-dataval=”“;
函数callCgiFile(){
返回$.get(“https://gist.githubusercontent.com/guest271314/"
+“6a76aa9d2921350c9d53/raw/”
+“1864137bfd2eb62705bd0e71175048a28b3253e6/abc.txt”);
}
callCgiFile()
.then(功能(数据){
dataval=数据;
警报(dataval);//正确地警报数据
//首先返回'dataval',然后`
返回数据值
})
//在第二秒内使用'dataval'进行操作。然后`
.then(功能(数据){
警报(数据值)
});


“我试图在第二次
警报(dataval)时,在函数之外访问它”
dataval
之外调用code>。那么在调用时可能未定义
?我的问题是我已经在part1.js中使用了异步,然后在part2.js中调用了异步。但是我想我还必须使我的part2.js适应异步。我尝试将所有part2.js包装到一个函数中,但没有成功。我数小时前查看了该链接,但不幸的是,它仍然没有帮助:(这是“我试图在函数之外访问它”的预期结果)第二个
警报(dataval);
?是“part1.js”、“part2.js”单独加载到文档中?CGI文件会返回一个巨大的字符串。因此,当我执行第一个警报时,整个字符串都会返回。但是,在我的第二个警报中,字符串根本没有显示。是的,在HTML文件中,它们都是单独加载的。我了解Ajax的整个异步过程。但是,每个由于某种原因,我的代码不起作用。我不知道是不是因为mines不是一个即时函数,但由于某种原因,我在之后无法访问它,即使尝试了几乎所有可能的方法来解决这个问题。@yoyowasgood:不,你认为你理解异步的东西,但如果你仍然坚持按自己的方式来做的话意思是你肯定不理解异步的东西。你可以在之后访问它,但是你的时间不对,你需要在之后而不是之后访问它。你对after的定义是“调用函数后”,而我对after的定义是“异步函数完成处理后”。这不是语法问题,这是时间问题。停止尝试做你想做的事情,按照示例告诉你如何做的方式去做。哈哈,除了示例解决方案不起作用之外……如果它们起作用,我就不会在这里发帖子,听像你这样自大的人告诉我我知道什么和不知道什么。我正在尝试访问数据库在callCgiFile()调用之外。您的代码可以工作,但不完全是我想要的。谢谢!“我正在尝试在callCgiFile()调用之外访问datable。”是的,
callCgiFile()
异步返回结果。预期的结果是什么?我的意思是,我试图在callCgiFile()之外访问这个dataval变量函数作为一个整体。所以在})之后;,假设我可以访问dataval变量。我已经尝试在}之后调用callCgiFile();但是@guest271314“试图从整体上访问callCgiFile()函数之外的这个dataval变量。因此在})之后,假设我能够访问这个dataval变量。”
callCgiFile()
异步返回结果;问题的第二个
警报(dataval)
at
js
at似乎是同步的。结束括号和括号不会自动指示结果(如果有)已作为响应从
$.get()
返回,其中调用第二个
警报(dataval)
时,
dataval
仍可能是
未定义的。作为一种解决方法,可以利用
.then()
在异步链中访问
dataval