私はpromiseパターンを研究していて、node.jsにkriskowalのqを使用しています。
このスニペットを持っている:
var deferred = Q.defer();
try {
messageData = JSON.parse(message);
} catch (e) {
global.logger.warn('Error parsing JSON message.');
deferred.reject(e);
}
...
if (some_reason)
deferred.resolve(something);
...
return deferred.promise;
パーサーが両方とも失敗し、some_reasonがtrueの場合はどうなりますか?
実行は拒否から解決まで進み、両方のpromiseのメソッドが異なる時間に呼び出されて、バグが発生しますか?
拒否/解決を複数回呼び出すことは避けるべきですか?
約束は1回しか解決できません (履行されたまたは拒否された)ので、最初の解決が勝ち、それ以降の呼び出しは無視されます。から ドキュメント :
約束が解決された(つまり、履行または拒否された)すべての場合において、解決は永続的であり、リセットすることはできません。 promiseがすでに解決されている場合に、resolve、reject、またはnotifyを呼び出そうとしても、何も起こりません。
拒否/解決を複数回呼び出すことは避けるべきですか?
2つのメソッドを相互に「競合」させて遅延を解決するようにアプリケーションを設計することもできますが、一般に、読者の混乱を減らすために回避する必要があります。