gpt4 book ai didi

javascript - Promise 处理程序 (.then/.catch/.finally) 总是异步的吗?

转载 作者:行者123 更新时间:2023-12-02 21:58:00 24 4
gpt4 key购买 nike

检查这个:https://javascript.info/microtask-queue第一行说

promise handlers .then/.catch/.finally are always asynchronous

但它们总是按顺序执行。只有当它在中间失败时它才会跳起来去接住。那怎么会是异步呢?

最佳答案

Promise 的设计中没有任何内容要求它们的使用是同步或异步的。其目的是让程序员不必担心代码是其中之一,因此应该假设异步副作用总是会发生。

有关堆栈溢出的最流行(但令人恼火)的问题之一如下:

function fooBar(promise) {
let y;
promise.then(value => y = value);
return y;
}

Why does fooBar() always return undefined?

如果使用 Promise 的每个人都假设它们都是异步,那么错误就会减少,并且如何使用它们的说明也会得到改进。

异步意味着处理程序不会在同一 JavaScript 堆栈(事件队列)期间执行,因此上述内容应始终产生 undefined

当使用同步 promise 时,上述实际上有效。这可能会让一些不理解两者之间区别的开发人员感到困惑。这也意味着该函数的结果是意外,因为无法确定 Promise 的内部性质是同步还是与外部异步

关于javascript - Promise 处理程序 (.then/.catch/.finally) 总是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59955489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com