JavaScript的Promise必须要会的几个点
1. Promise.resolve()立即将Promise视为成功,立即调用then中的语句。
2. Promise.then()语句中也可以包含一个新的Promise对象。
3. Promise.catch(console.error)即可将错误抛出。
4. 除了上面一种方法外,还可以用then()中的第二个参数来处理错误。
来看下面一个例子:
const a = ()=>{
new Promise(
(resolve) = > {
setTimeout(()=>{
console.log('a');
resolve();
}, 1e3
));
const b = ()=>{
new Promise(
(resolve) = > {
setTimeout(()=>{
console.log('b');
resolve();
}, 1e3
));
const c = ()=>{
new Promise(
(resolve) = > {
setTimeout(()=>{
console.log('c');
reject('Oops!);
}, 1e3
));
const d = ()=>{
new Promise(
(resolve) = > {
setTimeout(()=>{
console.log('d');
resolve();
}, 1e3
));
// 下面开始调用
Promise.resolve()
.then(a)
.then(b)
.then(c)
.then(d)
.catch(console.error)
// 或者是下面这种捕捉错误的方式
Promise.resolve()
.then(a)
.then(b)
.then(c)
.then(d,()=>{console.log('c erred out but no big deal...')})
.catch(console.error) // 该步骤一般不会执行
如果要忽略c中发生的错误,让调用链继续执行,则可以在c所在的then中调用.catch()方法,如下:
Promise.resolve()
.then(a)
.then(b)
.then(() => {
c().catch((error) => console.log('error ignored))
}
)
.then(d)
.catch(console.error)
5. finally
Promise.resolve()
.then(a)
.then(b)
.then(c)
.then(d)
.catch(console.error)
.finally(()=>{console.log('always called')})