1.使用async关键字可以让函数具有异步特征,但总体上其代码仍然是同步求值的
async function foo(){
console.log(1)
}
foo();
console.log(2);
//1
//2
2.异步函数如果使用return 关键字返回了值(如果没有return会返回undefined),这个值会被Promise.resolve()包装成一个期约对象。在这个函数外部可以得到它返回的期约
async function foo(){
console.log(1)
return 3;
}
// 给返回的期约添加一个解决处理程序
foo().then(console.log);
console.log(2);
// 1
// 2
// 3
// 直接返回一个期约对象也是一样的
async function foo(){
console.log(1);
return Promise.resolve(3)
}
// 给返回的期约添加一个解决处理程序
foo().then(console.log);
console.log(2);
// 1
// 2
// 3
3.使用await关键字之后的区别其实比看上去的还是微妙一些,比如下面的例子
async function foo(){
console.log(await Promise.resolve('foo'))
}
async function bar(){
console.log(await 'bar')
}
async function baz(){
console.log('baz')
}
// baz
// bar
// foo
4.async/await中真正起作用的是await。async关键字,无论从哪个方面来看,都不过是一个标识符。毕竟,异步函数如果不包含await关键字,其执行的顺序和普通函数没有什么区别
async function foo(){
console.log('2')
}
console.log('1')
foo();
console.log('3')
// 1
// 2
// 3