我感兴趣的是Promise的最佳实现,它意味着给出一个布尔结果。我的问题考虑了承诺/期货的任何实施,包括与Promises/A+中的then
逻辑等效。
我的问题是:这样的Promise resolve
是否应该使用布尔值,无论结果如何,resolve
和true
reject
上的false
应该是什么?
因此在Javascript中就像在ES6中一样:
class Named {
constructor(name) {
this.name = name;
}
// always resolve
isFoo1() {
return new Promise(resolve => {
resolve(this.name === 'Foo');
});
}
// resolve or reject
isFoo2() {
return new Promise((resolve, reject) => {
if (this.name === 'Foo') {
return resolve(true);
}
reject(new Error('Not Foo!'));
});
}
}
现在你可以做到:
const namedObjects = [new Named('Foo'), new Named('FooBar'), new Named('Foo')];
const nameChecks = namedObjects.map(obj => obj.isFoo1());
const checkNames = () => namedObjects.map(obj => obj.isFoo2());
// using always resolve
Promise.all(nameChecks)
.then(results => {
if(results.every(v => v)) {
return alert('all is foo!');
}
alert('all is not foo!');
});
// using resolve or reject
Promise.all(checkNames())
.then(() => alert('all is foo!'))
.catch(() => alert('all is not foo!'));
我认为"解决或拒绝"版本使用Promise
概念更自然地工作 - 特别是使用Bluebird中的扩展实现。
答案 0 :(得分:0)
您不希望将承诺的解决价值与其状态混为一谈。例如,假设XHR查询结果为false
。这是否意味着拒绝,或者您查询的值实际上是false
?