Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angular js 1.6中使用async:false,以便java脚本下一行执行得到阻止,直到$http完成_Javascript_Angularjs - Fatal编程技术网

Javascript 如何在angular js 1.6中使用async:false,以便java脚本下一行执行得到阻止,直到$http完成

Javascript 如何在angular js 1.6中使用async:false,以便java脚本下一行执行得到阻止,直到$http完成,javascript,angularjs,Javascript,Angularjs,目前,我正在使用angularjs 1.6,调用$http初始化数组,并在angularjs控制器中的1000行代码后使用该数组,但每次都会发生一些奇怪的事情。有时我能正确初始化数组,有时却不能 基本上,我想按一定的顺序调用JavaScript代码,如line1、line2、line3等,这里line1可以调用$http,line2可以再次调用一些函数line3$http 甚至我也试过使用 $http( { method:'POST', url:'/getData',

目前,我正在使用angularjs 1.6,调用
$http
初始化数组,并在angularjs控制器中的1000行代码后使用该数组,但每次都会发生一些奇怪的事情。有时我能正确初始化数组,有时却不能

基本上,我想按一定的顺序调用JavaScript代码,如line1、line2、line3等,这里line1可以调用
$http
,line2可以再次调用一些函数line3
$http

甚至我也试过使用

$http( {  method:'POST',
          url:'/getData',
          async:false
        })
但它并没有保存执行JavaScript,而是执行下一行代码。
是否有任何方法可以控制这一点,以便我能够以我编写的相同方式以相同的顺序执行JavaScript代码,

首先,在许多情况下,转到“none asynchrone”调用是个坏主意。你不知道这个调用要花多长时间,在这段时间里你阻塞了UI事件循环,所以没有其他东西在工作,你的网站在这段时间里会完全卡住,这是一件非常糟糕的事情

取决于您使用的是什么(ecma脚本/javascript),但是异步函数似乎是您想要的:

例如:

async function myFunction(){
    var data = await $http.get(...);
    await $http.post(..);
    return "my data";
}
由于关键字wait,此函数中的所有内容都将按其定义的顺序执行,但它仍然是异步的,整个函数将返回一个承诺

myFunction().then(function(myData) {
   console.log("End of the asynchrone function " + myData);
});

ES6
wait
未与AngularJS执行上下文集成。只有在AngularJS执行上下文中应用的操作才会受益于AngularJS数据绑定、异常处理、属性监视等。是的,您可能会遇到一些刷新问题,可以使用$scope.apply进行纠正。这不是最好的,但至少代码可能比链接更容易阅读,因为如果控制器已经有1k线路。。。也许您还应该在服务中分派一些代码,以简化控制器,并肯定地纠正AngularJS中的一些bugYes、async/await工作。它是javascript,不需要集成到框架中。与I/O操作阻止代码执行的旧语言不同,javascript引擎使用非阻塞I/O操作,其中提供了一个在操作完成时执行的函数。与其试图让AngularJS表现得像一种老式的语言,不如学习如何使用非阻塞I/O。$http服务返回一个承诺。学习如何将这些承诺应用到运营中。看起来你正在链接很多承诺。async/await是解决问题的最佳选择和现代方式。请避免上面建议的回调地狱和意大利面代码。