JavaScript 异步/等待
“async 和 await 使承诺更容易编写”
异步 使函数返回一个 Promise
等待 让函数等待 Promise
异步语法
关键词 async
在函数使函数返回承诺之前:
例子
异步函数 myFunction() {
返回“你好”;
}
是相同的:
函数 myFunction() {
返回 Promise.resolve("Hello");
}
以下是如何使用 Promise:
myFunction().then(
函数(值){/*成功时的代码*/},
{"params":["error"],"text":"/* 如果出现错误则显示代码 */"}
);
例子
异步函数 myFunction() {
返回“你好”;
}
myFunction().then(
函数(值){myDisplayer(值);},
函数(错误){myDisplayer(错误);}
);
亲自尝试 »
或者更简单,因为您期望一个正常值(正常响应,而不是错误):
Await语法
这 await
关键字只能在async
功能。
这 await
关键字使函数暂停执行并等待已解决的承诺后再继续:
让值=等待承诺;
例子
我们慢慢来,学习如何使用它。
基本语法
异步函数 myDisplay() {
让 myPromise = new Promise(function(resolve, rejection) {
resolve("我爱你!!");
});
document.getElementById("demo").innerHTML = 等待 myPromise;
}
我的显示();
亲自尝试 »
这两个参数(resolve 和 rejection)是 JavaScript 预先定义的。
我们不会创建它们,但是当执行器函数准备就绪时会调用其中一个。
很多时候我们不需要拒绝功能。
不带拒绝的示例
异步函数 myDisplay() {
让 myPromise = new Promise(function(resolve) {
resolve("我爱你!!");
});
document.getElementById("demo").innerHTML = 等待 myPromise;
}
我的显示();
亲自尝试 »
等待超时
异步函数 myDisplay() {
让 myPromise = new Promise(function(resolve) {
setTimeout(function() {resolve("我爱你!!");}, 3000);
});
document.getElementById("demo").innerHTML = 等待 myPromise;
}
我的显示();
亲自尝试 »
等待文件
异步函数 getFile() {
让 myPromise = new Promise(function(resolve) {
让 req = 新的 XMLHttpRequest();
req.open('GET', "mycar.html");
req.onload = 函数(){
如果 (req.status == 200) {
解决(请求。响应);
} 别的 {
resolve("文件未找到");
}
};
请求.发送();
});
document.getElementById("demo").innerHTML = 等待 myPromise;
}
获取文件();
亲自尝试 »
浏览器支持
ECMAScript 2017 引入了 JavaScript 关键字 async
和await
.
下表定义了第一个完全支持两者的浏览器版本:
铬 55 | 边缘 15 | Firefox 52 | Safari 11 | 歌剧 42 |
2016 年 12 月 | 2017 年 4 月 | 2017 年 3 月 | 2017 年 9 月 | 2016 年 12 月 |