首页 > 解决方案 > 如何在 Angular js 1.6 中使用 async:false,以便 java 脚本下一行执行被阻塞,直到 $http 完成

问题描述

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

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

即使我尝试过使用

$http( {  method:'POST',
          url:'/getData',
          async:false
        })

但它没有执行 JavaScript,而是执行下一行代码。有什么办法可以控制这个,这样我就可以按照我写的相同的顺序执行 JavaScript 代码,

标签: javascriptangularjs

解决方案


首先,在许多情况下,转向“无异步”调用是一个坏主意。你不知道这个调用需要多长时间,并且在这段时间内你阻塞了 UI 事件循环,所以没有任何其他工作,你的网站将在这段时间内完全卡住,这是一件很糟糕的事情。

取决于您使用的是什么(ecma 脚本/javascript),但异步功能似乎是您正在寻找的:https ://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/async_function

例子:

async function myFunction(){
    var data = await $http.get(...);
    await $http.post(..);
    return "my data";
}

由于关键字await,此函数中的所有内容都将按照其定义的顺序执行,但它仍然是异步的,整个函数将返回一个 Promise。

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

推荐阅读