文章目录
1. async 和 await
async
和 await
两种语法结合可以让异步代码像同步代码一样
async
和await
关键字让我们可以用一种更简洁的方式写出基于Promise
的异步行为,而无需刻意地链式调用promise
async
用来声明异步函数,函数会返回一个promise
对象
awiat
用来暂停异步函数代码的执行,等待promise
解决
2. 用promise存在的一个问题*
这个promise
在超时后会解决为一个值,如果程序中的其他代码要在这个值可用时访问它,则需要写一个解决处理程序
let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3));
// 如果程序中的其他代码要在这个值可用时访问它,则需要写一个解决处理程序
p.then(x => console.log(x)); //3
这样是不方便的,因为其他代码都必须塞到promise
处理程序中
3. async 声明异步函数
async
函数返回值为promise
对象promise
对象的结果由async
函数执行的返回值决定
async function fn() {
// 1. 返回结果不是一个Promise类型的对象,返回的结果就是成功的Promise对象
// return 'yk'; // Promise {<resolved>: "yk"}
// return; // Promise {<resolved>: undefined}
// 2. 抛出错误,返回的结果是一个失败的Promise
// throw new Error('出错'); // Promise {<rejected>: Error: 出错
// 3. 返回一个Promise
return new Promise((resolve, reject) => {
// resolve('成功的数据');
reject('失败的数据');
})
}
const result = fn();
console.log(result);
result.then(value => {
console.log(value);
}, reason => {
console