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

书接之前代码输出题目,

前端面试题之代码输出

前端面试题之代码输出二

前端面试题之代码输出三

前端面试题之代码输出四

前端面试题之代码输出五

前端面试题之代码输出六

前端面试题之代码输出七

前端面试题之代码输出八


异步&事件循环
17.代码输出结果
function runAsync(x) {
  const p = new Promise(r =>
    setTimeout(() => r(x, console.log(x)), 1000)
  );
  return p;
}
function runReject(x) {
  const p = new Promise((res, rej) =>
    setTimeout(() => rej(`Error: ${x}`, console.log(x)), 1000 * x)
  );
  return p;
}
Promise.race([runReject(0), runAsync(1), runAsync(2), runAsync(3)])
  .then(res => console.log("result: ", res))
  .catch(err => console.log(err));

输出结果如下:

0
Error: 0
1
2
3

代码执行顺序如下:

  1. 可以看到 catch 捕获到第一个错误之后,后面的代码还会执行,不过不会再被捕获了。
  2. allrace 传入的数组中如果有会抛出异常的异步任务,那么只有最先抛出的错误会被捕获,并且是被 then 的第二个参数或者后面的 catch 捕获,但并不会影响数组中其他的异步任务的执行。
18.代码输出结果
async function async1() {
    console.log("async1 start");
    await async2();
    console.log("async1 end");
}
async function async2() {
    console.log("async2");
}
async1();
console.log('start')

输出结果如下:

async1 start
async2
start
async1 end

代码执行顺序如下:

  1. 首先,调用 async1() 函数,进入 async1 的执行上下文
  2. async1 函数中,打印出 "async1 start"
  3. 执行 await async2(),进入 async2 的执行上下文
  4. async2 函数中,打印出 "async2"
  5. async2 函数执行完毕,跳出 async1
  6. 在全局上下文中,打印出 "start"
  7. 在一轮宏任务执行完成后,再来执行 await 后面的 async1 end
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

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

暂无评论

推荐阅读
FTKwE7sqlksi