考虑这两个功能:
function a(){
//...
if(something) {
return Promise.resolve();
} else {
return Promise.reject();
}
}
function b(){
//...
return new Promise((resolve, reject) => {
if(something) {
resolve();
} else {
reject();
}
});
}
我经常遇到第二种方法,但第一种看起来对我来说更清洁。当代码与每种方法的工作方式不同时,是否有任何特定的,罕见的用例,或者它只是语义?
答案 0 :(得分:3)
这两个例子都没有意义,因为代码是同步的。
如果你有传统的回调功能,例如setTimeout
,你必须使用new Promise
将其转换为承诺(你不能从回调中返回Promise.resolve(value)
:
const later = (howLong, value) =>
new Promise(
resolve =>
setTimeout(() => {
console.log(value);
resolve(value)
}, howLong)
);
使用Promise.resolve
可以用作初始值,例如,当您异步减少值时:
[1,2,3].reduce(
(all, item) =>
all.then(
() => later(2000, item)
),
Promise.resolve()//initial value of all
)
另一个常见的用例是你的函数必须返回一个promise但是可以立即返回一个值。假设您获取了一些数据并在获得数据时对其进行缓存。下次调用函数时,您希望它返回一个promise,因为调用者期望一个promise。您将缓存的值包装在promise中:
const getData = (
cache => () =>
(cache)
? Promise.resolve(cache)
: fetch("someURL").then(r=>r.json()).then(result=>{
cache=result;
return result;
})
)(false)
答案 1 :(得分:0)
我能看到的唯一区别是函数b()返回**整个promise,可以从b函数的**参数中获取accept和reject函数。然而,函数a()是一个预定义的Promise,它可以被传递给一个()但是它的接受和拒绝都是一样的,并且返回那些函数而不是Promise对象。