私はPromiseの最適な実装に興味があり、ブール値の結果を与えることを意図しています。私の質問は、Promises/A+のようにthen
の論理的に等価なものを含む約束/先物の実装を考慮します。 私の質問です:そのような約束resolve
は結果が何であれ、それはresolve
true
とreject
の上にfalse
に何かをする必要がありますか? ES6のようにJavaScriptでこのようにブール戻り値を持つ約束を使用する
:
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のような拡張された実装を使用します。
プロミスは、アプリケーション*に適した*を使用して解決できます。オブジェクト、数字、文字列、何でも。 – Pointy
両方のバージョンがboolで解決されることに注意してください。問題は解決すべき問題ではありません。しかし、boolをマップして_and_ rejectまたはboolを解決するかどうか。 –
申し訳ありませんが、質問はまだ意味をなさない。 – Pointy