2017-05-22 34 views
3

基本上,如果內部使用await,函數必須以async關鍵字爲前綴。但是,如果某個函數只返回Promise而不等待任何事情,我應該將該函數標記爲async何時將功能標記爲async

似乎都正確與否?

// with async (returns Promise) 
async getActiveQueue() { 
    return redisClient.zrangeAsync(activeQueue, 0, -1); 
} 

// difference? Both could be awaited isn't it? 
getActiveQueue() { 
    return redisClient.zrangeAsync(activeQueue, 0, -1); 
} 

回答

2

如果有些功能只是返回Promise並且不等待任何事情,我是否應該將該函數標記爲異步?

我會說你不應該。 async/await的目的是爲你創造(並解決)許諾;如果您已經承諾退貨,那麼async/await不會爲您提供該功能的任何好處。

兩者都可以等待是不是?

await工作在承諾,而不是功能。因此,await對任何承諾都能正常工作,無論該承諾是由手動創建還是由async在幕後創建。

0

如果你的函數「不等待任何東西」 - 這是常用的功能,即使您的內部回報率函數可以是異步(這是incapsulation)...

2

如果您爲某些未知原因調用的函數引發錯誤,則async關鍵字將確保這將作爲函數拒絕的承諾返回。

async關鍵字也可用於希望僅從返回值返回承諾(例如api一致性)的函數,而無需手動創建Promise對象。

我會說,async關鍵字不總是與await配對。