簡體   English   中英

Promise.then 在解決之前

[英]Promise.then before resolve

我有一個對象數組,每個對象都需要來自 api 調用的數據。

每個對象的 api 端點都不同。

我正在迭代對象數組並為每個對象創建一個承諾。

然后我使用 Promise.all 傳遞一系列承諾。

一旦承諾得到解決,我需要用它們各自的數據更新原始的對象數組。 為了防止兩次迭代對象數組,我在 Promise 解決之前將 then 的結果分配(為了更好的詞)。

它有效,但是這種方法有什么陷阱嗎?

updateData = async (objects) => {
    const promises = [];
    objects.forEach(object => {
        if (object.data === undefined) {
            const service = this.serviceFactory.getService(object.serviceKey);
            promises.push(service[object.serviceFunc](object.id).then(data => object.data = data));
        }
    });

    await Promise.all(promises);
};

不,一切都很好,但我鼓勵你使用 async/await 來完成整個實現。 像這樣的東西:

const processObject = async (object) => {
  if (object.data === undefined) {
    const service = this.serviceFactory.getService(object.serviceKey);
    const data = await service[object.serviceFunc](object.id);
    object.data = data
  }
  return object;
}

updateData = async (objects) => {
  const promises = objects.map(processObject);
  const processedObjects = await Promise.all(promises);
};

它有效,但是這種方法有什么陷阱嗎?

顯示的代碼本身很好,這是否可能有陷阱更多地取決於調用方(您如何處理updateData以及是否清楚傳遞給函數的對象已更新)。

關於代碼本身:我可能會使用map而不是forEach ,這將允許您在該回調中使用await ,並使其在意外破壞回調中的 Promise 鏈方面不太容易出錯。

 updateData = async(objects) => { const promises = objects.map(async (object) => { if (object.data === undefined) { const service = this.serviceFactory.getService(object.serviceKey); object.data = await service[object.serviceFunc](object.id); } }); await Promise.all(promises); };

object.data === undefined為 false 的情況下,返回值為undefined ,但這不是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM