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)
更短。然而,历史上并不总是这样,whenwhen
函数为库提供了一个重要的入口点,例如in或the.
有趣的是()。开创性的工作,真的:-)我一直认为你做了.then()来将数据提取与你实际对数据所做的事情分离(因此更容易测试),但不确定。啊,好吧,在这种情况下,当(x,f)
是一块不必要的糖——一个无缘无故的反叛者。@Roamer-1888:原因似乎主要是历史性的。你知道,git Dull
是一个非常有用的工具:-)