javascript - 如何在 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 代码,
解决方案
首先,在许多情况下,转向“无异步”调用是一个坏主意。你不知道这个调用需要多长时间,并且在这段时间内你阻塞了 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);
});
推荐阅读
- html - 如何防止列表重叠flexbox div
- python - 如何测试具有多个表单输入步骤的 Flask 网页?
- assembly - 符号表中的值是什么?
- android - 通过使用 FragmentContainerView 标签使用带有底部导航栏的导航组件
- reactjs - 如何增加 Antd Collapse 图标大小并在折叠展开时更改它
- php - 在 PHP 函数内部的 HTML 标记中插入 PHP 变量
- java - Elasticsearch 客户端默认为 localhost
- delphi - 当我从 Delphi 程序调用 Windows API 时,为什么会出现堆栈溢出?
- python - 使用 base64 加密密码
- php - 将 Xampp 升级到 php8 后 Apache 无法启动