gpt4 book ai didi

javascript - `when(foo, f)` 和 `when(foo).then(f)` 有什么区别

转载 作者:行者123 更新时间:2023-11-30 16:41:15 27 4
gpt4 key购买 nike

我正在查看一些使用 when.js 的现有代码。出现几次的模式是:

return when(someBigFunction(), function() {
doSomeMoreProcessing();
if (maybe) {
throw someError;
}
});

我想他们在这里使用 when 的原因是他们当时不确定 someBigFunction() 是否会返回一个 promise 。

在语义上,上述和:

return when(someBigFunction()).then(function() {
...
});

通常这些示例不使用 promise 的返回值(也就是说,它是 function() { 而不是 function(x) {).

API 文档提供了这个:

  • when(x,f):通过将 x 转换为 f 来获得可信的 promise
  • then:通过将函数应用于 promise 的实现值来转换 promise 的值。

所以我怀疑没有区别,但也许我错过了一个微妙之处?

最佳答案

查看 implementation itself确实清除了这一点:

function when(x, onFulfilled, onRejected, onProgress) {
var p = Promise.resolve(x);
if (arguments.length < 2) {
return p;
}

return p.then(onFulfilled, onRejected, onProgress);
}

when(x,f)when(x).then(f) 之间绝对没有区别

(假设 .then(…) 不关心它的调用堆栈或额外的 undefined 参数)

今天,它纯粹是糖,因为 when(x, f) 比它的替代方案更短,甚至比更高效的 Promise.resolve(x).then(f)。然而,历史上情况并非总是如此,when 函数提供了库的重要入口点,例如在 this version (10/2011)initial commit (5/2011) .
有意思的还有commit Architectural decision that when() should always return a promise (result, 9/2011)。开创性的工作,真的:-)

关于javascript - `when(foo, f)` 和 `when(foo).then(f)` 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31955146/

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