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

书接之前代码输出题目,

前端面试题之代码输出

前端面试题之代码输出二

前端面试题之代码输出三

前端面试题之代码输出四

前端面试题之代码输出五

前端面试题之代码输出六

前端面试题之代码输出七

异步&事件循环
15.代码输出结果
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.all([runAsync(1), runReject(4), runAsync(3), runReject(2)])
    .then(res => console.log(res))
    .catch(err => console.log(err))

输出结果如下:

1
3
2
Error: 2
4

代码执行顺序如下:

  1. 在这个例子中,Promise.all 方法接受一个数组作为参数,并返回一个新的 Promise 对象,该 Promise 对象在所有给定的 Promise 对象都被 resolvereject 后才 resolvereject 。对于每个传入的 Promise 对象,我们使用不同的方式处理 resolvereject 结果。对于成功的操作,我们在1秒后将数字作为 resolve 参数传递给 Promise ,并使用 console.log 打印出来。对于失败的操作,我们在 1000 乘以失败数字的时间后,将错误消息作为 reject 参数传递给 Promise ,并使用 console.log 打印出来。
  2. 由于这些操作是异步执行的,因此它们的实际执行顺序可能与它们在代码中的顺序不同。在这个例子中,我们可以看到数字1在数字4之前成功,而数字3在数字2之前成功。这是因为Promise.all方法会等待所有Promise对象都resolve或reject后才继续执行后续操作,因此它们的执行顺序是按照它们在数组中的顺序进行的。同时,由于失败的操作会直接reject,因此它们的结果会直接打印在控制台上,而不会等到Promise.all方法的then方法被调用。
16.代码输出结果
function runAsync(x) {
    const p = new Promise(r => setTimeout(() => r(x, console.log(x)), 1000))
    return p
}
Promise.race([runAsync(1), runAsync(2), runAsync(3)])
    .then(res => console.log('result: ', res))
    .catch(err => console.log(err))

输出结果如下:

1
result:  1
2
3

代码执行顺序如下:

then 只会捕获第一个成功的方法,其他的函数虽然还会继续执行,但是不是被 then 捕获了。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

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

暂无评论

推荐阅读
FTKwE7sqlksi