[英]How to push async functions to an array without execution for a future Promise.all
我有一些異步函數可以調用 REST API 並返回結果。 我想使用 Promise.all 一次調用其中幾個函數並等待完整結果。 我了解 Promise.all 的工作原理,這不是 Promise.all 的問題。 這是使用 Array.push 動態創建我想要調用的異步函數數組的問題。
所以這是場景。 我的應用程序的用戶加載了一個頁面。 該頁面需要從 API 檢索數據。 它使用我提到的那些異步函數來做到這一點。 但是,頁面需要檢索的數據根據設置的參數而有所不同。 所以有時,它可能需要檢索用戶列表、特定客戶和特定項目。 其他時候,它可能需要獲得所有用戶和所有項目,而沒有客戶。
所以我的代碼看起來像這樣:
created() {
let promiseList = []
if (options.getCustomers) { promiseList.push(listCustomers())
if (options.getCustomer) { promiseList.push(getCustomer(customerId)) }
if (options.getUsers) { promiseList.push(getUsers()) }
await Promise.all(promiseList)
}
所以這在某種程度上是有效的。 Promise.all 工作正常。 問題是我不能在沒有立即調用函數的情況下將函數推送到數組。 因此,我推送到 promiseList 數組的每個函數都會被調用兩次:使用 Promise.all 一次又一次地調用。
如何將異步函數作為引用推送到數組,以便它不會立即執行?
將對該函數的引用放入數組中,然后在使用 Promise.all 時使用映射調用
created() {
let promiseList = []
if (options.getCustomers) { promiseList.push({ func: listCustomers })
if (options.getCustomer) { promiseList.push({ func: getCustomer, arg: customerId}) }
if (options.getUsers) { promiseList.push({ func: getUsers }) }
await Promise.all(promiseList.map( (prom) => prom.func(prom.arg) ))
}
created() {
let promiseTasks = []; // meaning name is better
if (options.getCustomers) {
promiseTasks.push(() => listCustomers());
}
if (options.getCustomer) {
promiseTasks.push(() => getCustomer(customerId));
}
if (options.getUsers) {
promiseTasks.push(() => getUsers());
}
await Promise.all(promiseTasks.map((func) => func()));
}
注意:我不認為是你要使用Promise.all的用例,因為它看起來像所有的get請求,最好分開到不同的端點。
請求選項通常可以是以下選項:限制、排序、投影、populateQuery、preventPopulate。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.