2017-10-11 4 views
0

APIからデータを取得してキャッシュするためにこの関数を書きました。Promiseが期待する関数からオブジェクトを返す

export class MyService { 
    static items: Array<Post> = null; 

    async getItems(): Promise<Array<Post>> { 
    if (MyService.items) { 
     return MyService.items; 
    } 
    else { 
     return this.doRequest();  
    } 
    } 

    private async doRequest: Promise<Array<Post>> { 
    // get items from API. 
    } 
} 

は、私が知っているように、私はgetItems機能、のようなものからの約束を返す必要があります。機能上return Promise.resolve(MyService.items)、なぜ(どのように)まだ仕事 - 私は約束-期待される機能からオブジェクトを返しますよ?

答えて

2

キーワードの前には、asyncというキーワードが付いている関数は、自動的にその戻り値を約束で囲みます。 Promise.resolve()などを使用して手動で行う必要はありませんが、そうすることもできます。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_functionから

非同期関数が呼び出されると、それは約束を返します。 async関数が値を返すと、Promiseは戻り値で解決されます。 async関数が例外または何らかの値をスローすると、スローされた値でPromiseが拒否されます。

強調鉱山。この処理は、asyncキーワードを使用して関数を宣言した結果として自動的に行われます。

さらに、typescriptはそれを認識しています。Array<Category>に従う値を返す限り、typescriptは自動的にPromise<Array<Category>>にラップされることがわかっています。

関連する問題