2016-07-13 5 views
0

私は角度のある1ページのアプリを持っています。コンテキストサービスを通じて利用可能なグローバルな利用可能な状態があります。は、すべての解決済みの約束で新しいデータを解決します

このコンテキストサービスには、getおよびsetメソッドがあります。 getメソッドは、ページがロードされてもAPIを介して取得されたコンテキストがまだ設定されていないため、約束です。

コンテキストが設定されると、約束が解決され、getメソッドでコンテキストにアクセスできます。

しかし、私はどのように設定された方法に対処することができます。 setメソッドでコンテキストを変更することは可能です。しかし、約束がすべて解決されてから、getメソッドは古いコンテキストを返します。

解決済みの約束のデータを「代用」することは可能ですか?

ありがとうございます!

+1

いいえ、これはできません。コードはすでに実行されています。その場合は、コールバックを保存してから再度コールする必要があります。 – Robin

+0

rxjsストリームを使用すると、新しいデータが利用可能になるたびにコールバックが呼び出されます。 – xelilof

+1

コードは1024語に相当します。あなたがしていることを正確に示す[mcve]。 –

答えて

1

getメソッドは、あまり意味がありません約束...

です。私はそれを仮定している約束を返します。

しかし、どのように設定方法に対処することができます。 setメソッドでコンテキストを変更することは可能です。しかし、約束がすべて解決されてから、getメソッドは古いコンテキストを返します。

コードは、そのような古い約束を保持して再利用するべきではありません。例:

var p = object.getThePromise(); 
p.then(function(value) { 
    // ...use the value... 
}); 
// later - this is the bit that's wrong 
p.then(function(value) { 
    // ...use the value... 
}); 

これを行うべきではありません。新しい値が必要な場合は、値を後でもう一度入力したい場合は、getThePromiseに戻ってください。

解決済みの約束のデータを「代用」することは可能ですか?

いいえ約束契約の重要な部分は、約束が一度しか決済されず、決済額が変更されないことです。

あなたのAPIを見ることなく言うのは難しいですが、APIが「取得」と呼んで結果の約束を再利用できるという印象を与えるならば、APIを変更してもはやその印象を与えないようにするのが最善でしょう。しかし、APIの詳細がなければ、そのようなケースかどうか、あるいは変更を提案するのは難しいです。

関連する問題