0
私はionic 3のプロバイダクラスで変更するオブジェクトを持っています。このオブジェクトは他のメソッド/ページ/コンポーネントからアクセスできます。このオブジェクトにロックを設定する方法はありますか?あるメソッドで変更するときは、他のエリアからは変更されません。Ionic3/Angular2の変数の変更をロック
私はionic 3のプロバイダクラスで変更するオブジェクトを持っています。このオブジェクトは他のメソッド/ページ/コンポーネントからアクセスできます。このオブジェクトにロックを設定する方法はありますか?あるメソッドで変更するときは、他のエリアからは変更されません。Ionic3/Angular2の変数の変更をロック
おそらく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;
}
セットがコールバックで発生する場合は、そのコールバックのブール値を解除します。
申し訳ありませんが、 'readonly'は解決できません。プロパティが複数回変更されます。メソッドA()がオブジェクトXを変更しているときにメソッドB()がそれを変更できないようにする方法を見つけようとしています。また、メソッドB()のコードは、Xのロックが解放されるまで待機し、変更を続行します。似たようなものを見つけましたが、Ionic3では使用できません。 https://www.npmjs.com/package/threaded-lock –
申し訳ありませんが、まだ1つのコンセプトが明確ではありません。 'first_method()'と 'this.can_set = false'の中間にあるとしましょう。 'second_method()'はただちに変更が許可されていないことを確認して戻ります。最初のメソッドが終了するのを待つことはなく、ロックを解除してから仕事をします。何か不足していますか? –
非同期関数内にロックを持たない限り、これは起こりません。 Typescriptは、行ごとに同期しています。言い換えれば、私が提供したコードが単体であった場合、記述したシナリオは不可能です。しかし、 'can_set = true'をセットしてからそれを変更する前にサーバコールのようなことをしたら、その変数を望ましくない突然変異にさらすことができます。 –