`when(foo,f)`和`when(foo).then(f)`之间有什么区别?

时间:2015-08-12 02:35:55

标签: javascript promise when-js

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

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

我想他们在这里使用when的原因是他们当时不确定someBigFunction()是否会回复承诺。

在上面和上面之间是否存在差异:

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

通常,示例不使用promise的返回值(即function() {而不是function(x) {

API文档提供了这个:

  • when(x,f):通过使用f
  • 转换x来获得可信任的承诺
  • then:通过将函数应用于promise的履行值来转换promise的值。

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

1 个答案:

答案 0 :(得分:2)

查看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 promiseresult, 9/2011)。开创性的工作,真的: - )