接昨天代码输出题目,
前端面试题之代码输出
前端面试题之代码输出二
前端面试题之代码输出三
异步&事件循环
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,并将其打印到控制台上。










