Promise
想了解Promise可传送至:Promise
async+await
想了解async+await可传送至:async+await
用法举例:
//async 函数(包含函数语句、函数表达式、Lambda表达式)会返回一个 Promise 对象,如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。
async function testAsync() {
return "Hello Async!"
}
console.log(testAsync()); // print:Promise { 'Hello Async!' }
// new Promise()里面的内容会立即执行
// 为了实现调用时执行,Promise一般都作为函数的返回值
function test() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let name = "zs";
resolve(name);
}, 2000);
})
}
async function main() {
console.log(test()); // print: Promise { <pending> }
console.log("then(): ", test().then()); // then()返回结果也是一个Promise
// 以下两种方式效果一样:Promise + then
// test().then((data) => {
// console.log(data);
// })
// async + await: (其实就是Promise + then的语法糖)
let data = await test(); // await会拿到resolve的结果,且必须用在async函数中
console.log(data); // 两秒后打印:zs
}
main();
// ==注意:==
// await 命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try...catch 代码块中。
因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值——这也可以说是 await 在等 async 函数,但要清楚,它等的实际是一个返回值。注意到 await 不仅仅用于等 Promise 对象,它可以等任意表达式的结果,所以,await 后面实际是可以接普通函数调用或者直接量的。