2016-05-06 4 views
0

私は約束を返す非同期関数を持っています。操作は1回だけ実行する必要があります。その機能のすべての呼び出し元に同じPromiseを返すようにしたいが、ある呼び出し元の.catch()が別の呼び出し元に影響することは望ましくない。私は約束をクローンしたり、別の方法でこれを実装できますか?プロミスをクローンすることはできますか?

+0

[Memoization of promise-based function]の可能な複製(http://stackoverflow.com/q/28763057/1048572)? – Bergi

答えて

1

しかし、ある発信者の.catch()が別の発信者に影響することは望ましくありません。

(あなたがコールバックを連鎖していない限り、そうでない場合)。

私は、その関数のすべての呼び出し元が、ちょうどそれを行うのと同じ約束

を取り戻すしたいです。約束は不変の値です。

私は約束をクローンできますか?

あなたが本当に元の約束(それが満たしたときに満たすか、それは拒否したときに拒否)に従いますの異なるオブジェクトが必要な場合は、引数なしでthenメソッドを使用することができます。

var clone = promise.then(); 
console.assert(clone !== promise); 

1:あなたが適切な約束ライブラリを使用していると仮定します。私はthenコールバックの結果が約束の状態を変えた図書館のケース(古いjQuery?)を思い出すことができると思います。
2:少なくともその解決行動では、すべての約束は、依然として単なる目的です。
3:あなたはしていません。あなたは本当にすべきではありません。私はタイトルの質問に答えるだけですが、あなたは奇妙なことをやめてください。

+0

最初のオブジェクトの後に別個のオブジェクトが必要なのはなぜですか?同じ解決/拒否の複数のフォロワーが必要な場合は、複数のコードをすべて同じ約束で使用しないでください。 – jfriend00

+0

@ jfriend00:人々は約束で奇妙なことをやっているのですが、あなたが共有したくない*オブジェクト*のカスタムプロパティを考えていました。また、複数の異なる約束のインスタンスを渡すと、(実装のセマンティクスに応じて)相殺を行う可能性があります。しかし、通常の状況下では、まったく同じ約束を再利用すべきです。この答えをより明確にする必要がありますか? – Bergi

+0

私はあなたがおそらく99%の時間(基本的にいつもあなたが約束オブジェクト自体に非標準的なことをしているのでなければ)をもっと明確にすべきだと思います。あなたは別の約束を必要とせず、同じ約束。 – jfriend00

関連する問題