我正在查看一些使用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 then
:通过将函数应用于promise的履行值来转换promise的值。所以我怀疑没有区别,但也许我错过了一个微妙的东西?
答案 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 promise(result, 9/2011)。开创性的工作,真的: - )