接昨天代码输出题目,
异步&事件循环
7.代码输出结果
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
}, 1000)
})
const promise2 = promise1.then(() => {
throw new Error('error!!!')
})
console.log('promise1', promise1)
console.log('promise2', promise2)
setTimeout(() => {
console.log('promise1', promise1)
console.log('promise2', promise2)
}, 2000)
输出结果如下:
promise1 Promise {<pending>}
promise2 Promise {<pending>}
Uncaught (in promise) Error: error!!!
promise1 Promise {<fulfilled>: 'success'}
promise2 Promise {<rejected>: Error: error!!!
代码执行顺序如下:
- 创建一个名为
promise1
的Promise
对象,,遇到了定时器,resolve
函数在 1 秒后执行。此时,promise1
的状态为<pending>
。 - 创建另一个名为
promise2
的 Promise 对象 ,调用的是promise1.then()
。此时,promise2
的状态也为<pending>
。 - 在
promise2
的回调函数中,抛出了一个错误。经过 1 秒后,promise1
的resolve
函数被调用,将success
作为参数传给它。promise1
的状态变为<fulfilled>
。 - 由于
promise2
是promise1.then()
方法的返回值,因此当promise1
被 resolve 时,promise2
会立即得到通知,并执行其回调函数。由于在回调函数中抛出了错误,因此promise2
的状态变为<rejected>
- 经过 2 秒的延迟后,控制台会输出
promise1
和promise2
的状态。可以看到,promise1
的状态为<fulfilled>
,而promise2
的状态为<rejected>
。
8.代码输出结果
Promise.resolve(1)
.then(res => {
console.log(res);
return 2;
})
.catch(err => {
return 3;
})
.then(res => {
console.log(res);
});
输出结果如下:
1
2
代码执行顺序如下:
Promise.resolve(1)
创建一个 Promise 对象,并立即将其 resolve 为数字 1。then(res => { console.log(res); return 2; })
是第一个 then 回调函数,它接收到 Promise 对象的 resolve 值 1,并将其打印到控制台上。然后,它返回数字 2。catch
捕获的是Promise
对象可能抛出的错误,由于没有错误,所以不会执行。then(res => { console.log(res); })
是第二个 then 回调函数,它接收到上一个 then 回调函数返回的值 2,并将其打印到控制台上。