2017-04-13 66 views
4
async function foo() { 
    await this.getAsync(); 
    await this.getAsyncTwo(); 
    await this.getAsyncThree(); 
    await this.getAsyncFour(); 
} 

看看foo如何具有多個等待調用,有沒有一種方法可以在保持執行順序的同時簡單地執行此操作?如何在保持執行順序的同時減少在等待異步中使用await關鍵字

我想這是可能寫出像

async function foo() { 
    await 
    this.getAsync(), 
    this.getAsyncTwo(), 
    this.getAsyncThree(), 
    this.getAsyncFour(); 
} 

async function foo() { 
    await 
    this.getAsync() 
    .this.getAsyncTwo() 
    .this.getAsyncThree() 
    .this.getAsyncFour(); 
} 
+4

我擔心它已經在它的簡單形式。根據您打算如何處理這些等待的結果,使用下面的數組方法可能會爲您節省一兩行,從而爲每行代碼添加更多字符。 – Shilly

+0

請問您是否可以發佈您的實際代碼,以便我們可以根據這些調用的目的來判斷? – Bergi

+0

實際的代碼在一個函數範圍(主幹js模型)中包含4個調用。與嵌套的.then()=> {}調用相比,異步等待已經使生活變得更容易。 –

回答

1

您可以在Promise.all()

await Promise.all([this.getAsync(), this.getAsyncTwo(), /* etc */]) 
+0

但get this.getAsync()在this.getAsyncTwo()之前執行? –

+0

不一定 – lustoykov

+0

這正是我想要達到的效果:( –

3

此等待將保證你希望的順序執行順序對於。


async function foo() { 
    const functions = [this.getAsync, this.getAsyncTwo, ...]; 

    for (let func of functions) { 
    await func(); 
    } 
} 
+1

OP要求簡單一些,不要更復雜的東西 – zeroflagL

+0

你需要綁定這個,或者th在每個功能中都會出錯。 – jib

+0

取決於誰調用foo(),他沒有做到這一點,所以我認爲它是相同的對象:-) – lustoykov