簡體   English   中英

從 Promise 中的 forEach 返回數據

[英]Returning Data from a forEach inside a Promise

我在返回創建的對象時遇到問題,代碼如下:

在 Promise.allSettled 中,我最終得到了循環的結果並將每個數組推送到一個對象(這很好地創建了對象),當我嘗試返回該對象時,它是空的。

我想是因為我的諾言還沒有解決,我試過這樣做:

Promise.resolve(returnedData) 然后返回它,甚至 .then(results => results)。

我錯過了什么? 我想我已經看這個很久了,我想念的東西很清楚。

const getProductData = () => {
  debugger;
  const productIds = [];
  const returnedData = [];
  const customerLocation = getCustomerLocation();
  productdataItems.forEach((product) => {
    productIds.push(
      product
        .querySelector('[data-test-id="product-card-code"]')
        .innerHTML.replace(/[^0-9]/g, ''),
    );
  });

  const items = productIds.map((product) => ({
    productCode: product,
    quantity: 1,
  }));

  // Load in products for other steps
  const promises = [];
  productIds.forEach((sku) => {
    promises.push(getProduct(sku));
  });

  Promise.allSettled(promises).then((results) => {
    // Stock requires location data.
    if (customerLocation) {
      getEligibility(items, customerLocation).then((eligibility) => {
        getStock([customerLocation.collectionBranchId], productIds).then(
          (stock) => {
            results.forEach((result, i) => {
              if (result.value.product) {
                returnedData.push({
                  Product: result.value.product,
                  Eligibility: eligibility[i],
                  Stock: stock[i].quantity,
                  ProductMarkup: productdataItems,
                  PostCode: customerLocation.deliveryPostcode,
                });
              }
            });
          },
        );
      });
    }
  });

  return returnedData;
};

返回的數據在 promise.allSettled 之外。 所以它在 Promise.allSettled 完成之前被返回,因此它是空的。

您應該做的是將 returnData 的返回移動到 Promises 中

return Promise.allSettled(promises).then((results) => {
... ... 
return returnData;
}

getProductData 需要是一個返回承諾結果的異步方法。

暫無
暫無

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

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