2017-10-27 12 views
-1

最新のTypeScript拡張でコードの一部を近代化しようとしています。 私たちは多くのメモパターンを用意しています。 いくつかのサービスには複数のユーザがおり、誰もが1つのコールで待機し、複数のコールを起動しないようにしたいという考えがあります。
コードがそのtypescript asyncはオペレータの約束とメモのパターンを待つ

private isAdmin: Promise<Boolean>; 
public IsCurrentUserAdmin(): Promise<Boolean> { 
if (!this.isAdmin) { 
this.isAdmin = httpService.goGetTheData().then((data) => //do something and return Boolean); 
} 
return this.isAdmin; 

のように見える私の質問は:そのようなことは、同じ効果を持つことになり、私は「約束のオブジェクトへのアクセスを持っていない」のawait演算子と同じように?

+0

:以来、あなたがgoGetTheData()約束をキャッシュしていない、しかし、1つは.then(…)によって返された(「何かをする」もそのように一度だけ実行されます)、あなたはそのために余分なヘルパーメソッドを記述する必要があります2番目の例で 'return isAdmin;'にする必要があります。 – Fenton

答えて

2

いいえ、あなたはメモのためにプロミスオブジェクトに絶対にアクセスする必要があります。 async/awaitはそれを必ずしも防ぐわけではありません - それはthenコールの文法的な砂糖ですが、あなたの特別なケースではそれは本当に助けになりません。 `

private isAdmin: Promise<boolean>; 
private async fetchIsAdmin(): Promise<boolean> { 
    const data = await httpService.goGetTheData(); 
    // do something and 
    return // a boolean 
} 
public IsCurrentUserAdmin(): Promise<boolean> { 
    if (!this.isAdmin) { 
     this.isAdmin = this.fetchIsAdmin(); 
    // you could `await this.isAdmin` in here as well, but that would happen for every call 
    return this.isAdmin; 
} 
+1

@AluanHaddadありがとう、私はタイプスクリプトを知らない、私はちょうどOPが持っていたタイプをコピーした – Bergi

関連する問題