2017-09-12 62 views
0

此實現我有一個ViewModelBuilder類下面的方法:需要更新承諾鏈接

async buildViewModel(request) 
{ 
    const bsm = this.getBlogSearchMetadata(); 
    await this.getBlogPostSearchResults(request); 
    await bsm; 
    return this.vm; 
} 

這種原始的設計思路,讓getBlogSearchMetadata()getBlogPostSearchResults(request)在同一時間執行。他們都在this.vm上設置屬性,然後在完成這兩種方法後,buildViewModel將返回this.vm。

我有一個新的要求,承諾鏈接需要在這種方法中使用。 this.getBlogSearchMetadata()需要先返回,然後then()promise鏈應該調用this.getBlogPostSearchResults(request),並根據this.getBlogSearchMetadata()的響應設置請求值。

我上面提供的方法代碼反映了當前的實現。這段代碼是否足以描述我可以對代碼進行的具體更改以支持新要求?方法中的兩個子函數都用async關鍵字標記。

+1

嗨歡迎來到StackOverflow,本網站不是一個代碼編寫服務,請閱讀https://stackoverflow.com/help/how-to-ask瞭解如何最好地接受您遇到的特定問題的幫助。 –

回答

0

我有一個新的要求,承諾鏈接需要在此方法中使用。 this.getBlogSearchMetadata()需要返回第一和則()承諾鏈應該然後調用this.getBlogPostSearchResults(請求)

只需等待this.getBlogSearchMetadata()

async buildViewModel(request) 
{ 
    // Await 
    const result = await this.getBlogSearchMetadata(); 

    // now you can use `result` 
    await this.getBlogPostSearchResults(request); 
    return this.vm; 
} 
0

所以基本上,異步/的await和承諾是完全一樣的東西,他們只是看起來不同。這裏有兩個例子的工作方式不盡相同:

// Promises 
yourFunction() { 
    yourPromise().then(value => { 
     console.log(value); 
    }); 
} 


// Async/await 
async yourFunction() { 
    let value = await yourPromise(); 
    console.log(value); 
} 

所以要他們鏈條,可以有效地使用標準的承諾在您現有的異步函數鏈重構沒有他們。

看着你的代碼,我忘了提及:你也可以等待任何標準的承諾,它不一定是一個異步函數。