1. promise.then中的返回值作为下一次回调的参数
2. catch之后可继续执行链式操作
3. 错误传递,遇到异常抛出,浏览器会顺着Promise链寻找 onRejected失败回调函数或者由.catch()指定的回调函数
let promise = new Promise(resolve => {
console.log('初始化');
resolve();
}).then(() => {
throw new Error('抛出错误');
console.log('异常后执行'); // 不会执行
}).then(() => {
console.log('异常后的回调'); // 不会执行
}).catch(() => {
console.log('异常信息')
}).then(() => {
return 2; // 继续执行
}).then(res => {
console.log(res); // 上一次回调的返回值作为本次回调的参数
});
console.log(promise)
输出结果
async/await
可以让我们用一种更简洁的方式写出基于Promise的异步行为,不需要刻意的链式调用promise
返回一个Promise(如果返回值不是promise,那么它将会隐士地包装在一个promise中),成功状态 resolve(async函数返回值),失败状态async函数抛出异常
await会暂停整个async函数的执行进程,只有当等待的基于Promise的异步操作成功或失败之后才会恢复进程,promise的成功值会被当作await表达式的返回值
async function foo() {
const result = await new Promise((resolve) => setTimeout(() => resolve('1')))
// result = 1
}
foo()