0

How to make async/await for if I have 2 or more async/awaits in for loop ?

I would like to make this work:

  fetchedData.forEach(async i => {
    const product3P = await checkProducts3P(i.sku);
    const model = await checkModels(product3P.model);

    const row = {
      sku: i.sku,
      category: i.categories,
      isPresentSKU: !!product3P,
      isPresentModel: !!model,
      isPresentCategory: null
    };

    results.push(row);
  });

I tried this but it does not work:

  const fn = (i) => {
    return new Promise((resolve) => {
      const product3P = checkProducts3P(i.sku);
      const model = checkModels(product3P.model);
  
      const row = {
        sku: i.sku,
        category: i.categories,
        isPresentSKU: !!product3P,
        isPresentModel: !!model,
        isPresentCategory: null
      };

      resolve(row);
    });
  };
  
  const actions = fetchedData.map(fn);
  
  const promised = Promise.all(actions);
  
  await promised.then(console.log);

What am I doing wrong with the second version ?

aspirinemaga
  • 3,753
  • 10
  • 52
  • 95
  • The problem is not the multiple `await`s, it's the `forEach` itself. Change only that (and the `results.push` call), keep the callback `fn` the same otherwise. – Bergi Apr 25 '22 at 22:32
  • Isn't the second version the same as you suggested? – aspirinemaga Apr 25 '22 at 22:44
  • No. Don't use `new Promise`. Don't remove the `await`s in front of `checkProducts3P(…)` and `checkModels(…)`. Otherwise, yes use `map` and `Promise.all`. – Bergi Apr 26 '22 at 01:18
  • Also simplify `await promised.then(console.log);` to just `console.log(await promised);` :-) – Bergi Apr 26 '22 at 01:18

0 Answers0