ES6 学习笔记三
Promise 对象
1、Promise是异步编程的一种解决方案
2、Promise的两个特点:对象的状态不受外界的影响。一旦状态改变,就不会再变,任何时候都可以得到这个结果。
3、Promise也有一些缺点。首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)
4、Promise对象是一个构造函数,用来生成Promise实例
5、Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject
6、then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数
7、catch用于指定发生错误时的回调函数let postData = new Promise((resolve, reject) => { if (true) { resolve('success'); } else { reject('error'); } }); postData.then(value => { console.log(111, value); }).catch(value => { console.log(222, value); }).finally(() => { console.log('一边打工,一边自学'); });
async 与 await
1、async 函数本质是 generator 的语法糖
2、async 函数返回一个 promise 对象
3、 async 函数内部 return 返回的值,会成为 then 方法回调函数的参数
4、async函数返回的Promise对象,必须等到内部所有await命令的Promise对象执行完,才会发生状态改变
5、正常情况下,await命令后面是一个Promise对象。如果不是,会被转成一个立即resolve的Promise对象
6、 只要一个await语句后面的Promise变为reject,那么整个async函数都会中断执行
7、如果有多个await命令,可以统一放在try...catch结构中
8、 如果await后面的异步操作出错,那么等同于async函数返回的Promise对象被reject
9、await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中
10、多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发
11、await命令只能用在async函数之中,如果用在普通函数,就会报错
async function main() {
try {
var val1 = await firstStep();
var val2 = await secondStep(val1);
var val3 = await thirdStep(val1, val2);
console.log('Final: ', val3);
}
catch (err) {
console.error(err);
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接