前端面试题之代码输出(四)
  FTKwE7sqlksi 2023年11月02日 56 0

接昨天代码输出题目,

前端面试题之代码输出

前端面试题之代码输出二

前端面试题之代码输出三

异步&事件循环

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!!!

代码执行顺序如下:

  1. 创建一个名为 promise1Promise 对象,,遇到了定时器,resolve 函数在 1 秒后执行。此时,promise1的状态为<pending>
  2. 创建另一个名为promise2的 Promise 对象 ,调用的是 promise1.then() 。此时,promise2的状态也为<pending>
  3. promise2的回调函数中,抛出了一个错误。经过 1 秒后,promise1resolve 函数被调用,将 success 作为参数传给它。promise1 的状态变为 <fulfilled>
  4. 由于promise2promise1.then()方法的返回值,因此当promise1被 resolve 时,promise2会立即得到通知,并执行其回调函数。由于在回调函数中抛出了错误,因此promise2的状态变为<rejected>
  5. 经过 2 秒的延迟后,控制台会输出promise1promise2的状态。可以看到,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

代码执行顺序如下:

  1. Promise.resolve(1) 创建一个 Promise 对象,并立即将其 resolve 为数字 1。
  2. then(res => { console.log(res); return 2; }) 是第一个 then 回调函数,它接收到 Promise 对象的 resolve 值 1,并将其打印到控制台上。然后,它返回数字 2。
  3. catch 捕获的是 Promise 对象可能抛出的错误,由于没有错误,所以不会执行。
  4. then(res => { console.log(res); }) 是第二个 then 回调函数,它接收到上一个 then 回调函数返回的值 2,并将其打印到控制台上。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
FTKwE7sqlksi