1、async 放在函数声明前面,成为 async function,异步函数;
eg 1:
function hello() { return "Hello" };
hello();
函数返回 "Hello"
如果我们将其变成异步函数呢?
async function hello() { return "Hello" };
hello();
你也可以创建一个异步函数表达式(参见 async function expression ),如下所示:
let hello = async function() { return "Hello" };
hello();
你可以使用箭头函数:
let hello = async () => { return "Hello" };
这些都基本上是一样的。
现在调用该函数会返回一个 promise。这是异步函数的特征之一 —— 它保证函数的返回值为 promise。
要实际使用promise完成时返回的值,我们可以使用.then()
块,因为它返回的是 promise:
hello().then((value) => console.log(value))
甚至只是简写如
hello().then(console.log)
2、await 关键字自在异步函数里才起作用
它可以放在任何异步的,基于 promise 的函数之前。它会暂停代码在该行上,直到 promise 完成,然后返回结果值。在暂停的同时,其他正在等待执行的代码就有机会执行了。
async function hello() {
return greeting = await Promise.resolve("Hello");
};
hello().then(alert);
去除了到处都是 .then()
代码块!
不需要附加 .then()
代码块到每个promise-based方法的结尾,你只需要在方法调用前添加 await 关键字,然后把结果赋给变量。await 关键字使JavaScript运行时暂停于此行,允许其他代码在此期间执行,直到异步函数调用返回其结果。一旦完成,您的代码将继续从下一行开始执行。
用更少的.then()
块来封装代码,同时它看起来很像同步代码,所以它非常直观。