案例1
关注点: 同一个Promise只能改变一次状态
let p = new Promise(function (resolve, reject) {
reject();
resolve();
})
p.then(function () {
console.log('成功')
}, function () {
console.log('失败')
})
输出:
失败
案例2
关注点: resolve 和 reject 没有终止代码执行的功能
const promise = new Promise((resolve, reject) => {
console.log(1)
resolve()
console.log(2)
})
promise.then(() => {
console.log(3)
});
输出:
1
2
3
案例3
关注点:
- Promise.resolve() 等用于 new Promise((resolve,reject) => resolve(1))
- 再不报错的情况下,是不调用catch回调的
Promise.resolve(1) // new Promise((resolve,reject)=>resolve(1))
.then(res => 2)
.catch(err => 3) // .then(null,err=>3)
.then(res => console.log(res));
输出:
2
案例4
关注点: catch中返回普通值 会作为下一次的成功
Promise.resolve(1)
.then((x) => x + 1)
.then((x) => { throw new Error('My Error') })
.catch(() => { throw 'xxx' }) // catch中返回普通值 会作为下一次的成功
.then((x) => x + 1)
.then((x) => console.log(x))
.catch(console.error)
输出:
xxx
案例5
关注点: await后面执行的值等用于async2().then(()=> console.log(‘async-next’))
async function async1() {
console.log('async1 start'); //
await async2(); // async2().then(()=> console.log('async-next'))
console.log('async-next')
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function () {
console.log('setTimeout');
}, 0);
async1();
new Promise(function (resolve) {
console.log('promise1');
resolve();
}).then(function () {
console.log('promise2');
});
console.log('script end');
输出:
script start
async1 start
async2
promise1
script end
async-next
promise2
setTimeout