2017-11-03 16 views
0

私はionic 3のプロバイダクラスで変更するオブジェクトを持っています。このオブジェクトは他のメソッド/ページ/コンポーネントからアクセスできます。このオブジェクトにロックを設定する方法はありますか?あるメソッドで変更するときは、他のエリアからは変更されません。Ionic3/Angular2の変数の変更をロック

答えて

0

おそらくTypescript readonlyのプロパティを読みたいと思うでしょう。 readonlyプロパティは、初期化時またはコンストラクタでのみ設定できます。詳細については、このリンクをチェックアウト:

https://blog.mariusschulz.com/2016/10/31/typescript-2-0-read-only-properties

は、以下のコメントに反応して更新:

がロックを作成するには、なぜ、単純なブールを使用していませんか?複数の場所からプロパティにアクセスできる場合は、複数の場所からブール値にアクセスすることもできます。たとえば、次のようにします。

my_property: any; 
can_set = false; 

first_method() { 
    if(this.can_set) { 
    this.can_set = false; 
    // some code 
    my_property = something; 
    } 
    this.can_set = true; 
} 

second_method() { 
    if(this.can_set) { 
    this.can_set = false; 
    // some code 
    my_property = something; 
    } 
    this.can_set = true; 
} 

セットがコールバックで発生する場合は、そのコールバックのブール値を解除します。

+0

申し訳ありませんが、 'readonly'は解決できません。プロパティが複数回変更されます。メソッドA()がオブジェクトXを変更しているときにメソッドB()がそれを変更できないようにする方法を見つけようとしています。また、メソッドB()のコードは、Xのロックが解放されるまで待機し、変更を続行します。似たようなものを見つけましたが、Ionic3では使用できません。 https://www.npmjs.com/package/threaded-lock –

+0

申し訳ありませんが、まだ1つのコンセプトが明確ではありません。 'first_method()'と 'this.can_set = false'の中間にあるとしましょう。 'second_method()'はただちに変更が許可されていないことを確認して戻ります。最初のメソッドが終了するのを待つことはなく、ロックを解除してから仕事をします。何か不足していますか? –

+0

非同期関数内にロックを持たない限り、これは起こりません。 Typescriptは、行ごとに同期しています。言い換えれば、私が提供したコードが単体であった場合、記述したシナリオは不可能です。しかし、 'can_set = true'をセットしてからそれを変更する前にサーバコールのようなことをしたら、その変数を望ましくない突然変異にさらすことができます。 –

関連する問題