Javascript “when(foo,f)”和“when(foo)”之间有什么区别呢`

Javascript “when(foo,f)”和“when(foo)”之间有什么区别呢`,javascript,promise,when-js,Javascript,Promise,When Js,我正在查看一些现有的代码,它们使用when.js。出现几次的模式是: return when(someBigFunction(), function() { doSomeMoreProcessing(); if (maybe) { throw someError; } }); 我想他们在这里使用的原因是当时他们不确定someBigFunction()是否会返回承诺 在语义上,上述和以下两者之间是否存在差异: return when(someBigFunction()).th

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

return when(someBigFunction(), function() {
  doSomeMoreProcessing();
  if (maybe) {
    throw someError;
  }
});
我想他们在这里使用
的原因是当时他们不确定
someBigFunction()
是否会返回承诺

在语义上,上述和以下两者之间是否存在差异:

return when(someBigFunction()).then(function() {
...
});
通常,这些示例不使用承诺的返回值(即,它是
function(){
而不是
function(x){

API文档提供了以下内容:

  • 当(x,f)
    :通过用f转换x来获得可信的承诺
  • 然后
    :通过对承诺的履行值应用函数来转换承诺的值
因此,我怀疑两者没有区别,但也许我遗漏了一个微妙之处?

查看这些数据确实可以澄清这一点:

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

    return p.then(onFulfilled, onRejected, onProgress);
}
在(x、OnCompleted、onRejected、onProgress)时的函数{
var p=承诺。解决(x);
if(arguments.length<2){
返回p;
}
返回p.then(完成、拒绝、进度);
}
当(x,f)
当(x)时,则(f)
之间绝对没有区别

(假定
.then(…)
不关心其调用堆栈或其他
未定义的
参数)

今天,它是纯粹的糖,因为
when(x,f)
比它的替代品或更有效的
Promise.resolve(x).then(f)
更短。然而,历史上并不总是这样,when
when
函数为库提供了一个重要的入口点,例如in或the.

有趣的是()。开创性的工作,真的:-)

我一直认为你做了.then()来将数据提取与你实际对数据所做的事情分离(因此更容易测试),但不确定。啊,好吧,在这种情况下,
当(x,f)
是一块不必要的糖——一个无缘无故的反叛者。@Roamer-1888:原因似乎主要是历史性的。你知道,
git Dull
是一个非常有用的工具:-)