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

书接之前代码输出题目,

前端面试题之代码输出

前端面试题之代码输出二

前端面试题之代码输出三

前端面试题之代码输出四

前端面试题之代码输出五

前端面试题之代码输出六

前端面试题之代码输出七

前端面试题之代码输出八

前端面试题之代码输出九

前端面试题之代码输出十

前端面试题之代码输出十一


异步&事件循环
23.代码输出结果
async function async1() {
    await async2();
    console.log('async1');
    return 'async1 success'
}
async function async2() {
    return new Promise((resolve, reject) => {
        console.log('async2')
        reject('error')
    })
}
async1().then(res => console.log(res))

输出结果如下:

async2
Promise {<rejected>: 'error'}

代码执行顺序如下:

  1. 可以看到,如果 async 函数中抛出了错误,就会终止错误结果,不会继续向下执行
  2. 如果想要让错误不足之处后面的代码执行,可以使用 catch 来捕获
24.代码输出结果
const first = () => (new Promise((resolve, reject) => {
    console.log(3);
    let p = new Promise((resolve, reject) => {
        console.log(7);
        setTimeout(() => {
            console.log(5);
            resolve(6);
            console.log(p)
        }, 0)
        resolve(1);
    });
    resolve(2);
    p.then((arg) => {
        console.log(arg);
    });
}));
first().then((arg) => {
    console.log(arg);
});
console.log(4);

输出结果如下:

3
7
4
1
2
5
Promise {<fulfilled>: 1}

代码执行顺序如下:

  1. 首先会进入 Promise ,打印出 3,之后进入下面的 Promise ,打印出 7 ;
  2. 遇到了定时器,将其加入宏任务队列;
  3. 执行 Promise p 中的 resolve ,状态变为 resolved ,返回值为 1;
  4. 执行 Promise first 中的 resolve ,状态变为 resolved ,返回值为2 ;
  5. 遇到 .then ,将其加入微任务队列;
  6. 执行外面的代码,打印出 4 ;
  7. 这样第一轮宏任务就执行完了,开始执行微任务队列中的任务,先后打印出 1 和 2 ;
  8. 这样微任务就执行完了,开始执行下一轮宏任务,宏任务队列中有一个定时器,执行它,打印出 5 ,由于执行已经变为 resolved 状态,所以 resolve(6) 不会再执行;
  9. 最后 console.log(p) 打印出 Promise{: 1} ;
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

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

暂无评论

推荐阅读
FTKwE7sqlksi