当前位置: 代码迷 >> JavaScript >> 在 foreach 循环中进行 api 调用并将结果推送到另一个数组中
  详细解决方案

在 foreach 循环中进行 api 调用并将结果推送到另一个数组中

热度:104   发布时间:2023-06-13 11:43:38.0

我正在尝试在每个循环中进行 api 调用。 当我进行 api 调用时,该函数返回 Promise。 我想使用该返回响应并检查承诺是否已解决(然后做某事)以及是否被拒绝(然后做某事)。 但是,每次在 foreach 循环中,api 首先进行两个调用,然后转到 then() 部分。 我想要的是在 foreach 循环中,进行 api 调用 -> 检查是否已解决或被拒绝 -> 做某事 -> 进行 api 调用 -> 检查是否已解决或被拒绝 -> 做某事等等。

//不能改变下面的实现。 我需要使用这个已经创建的函数

    const callApiFunction = options => {
      const callback = (resolve, reject) => {
      something.call(options, resolve, reject)
    };
      return new Promise(callback);         
     }

//第一次尝试

const a =[];
const b =[];
list.forEach(listelement => {
    callApiFunction(options)
     .then(() => {
         a.push(listelement);
       })
     .catch(() => {
        b.push(listelement);
     });
});

//第二次尝试

    const a =[];
    const b =[];
   list.forEach(listelement => {
    let promise = new Promise((resolve, reject) => {
      callApiFunction(options);
      resolve(listelement);
      reject(listelement);
    });
    promise.then((listelement) => {
      a.push(listelement);
    })
    .catch((listelement) => {
      b.push(listelement);
    });
  });

在我的第二个代码块中发生的情况是,如果 list.length = 2,则 callApiFunction 首先执行两次, then执行两次。 我希望 callApiFunction 被执行并且 list[0] -> then or catch 相应地执行 callApiFunction 被执行并且 list[1] -> then or catch 相应地执行

这个带有for-of循环和await变体对你await吗?

'use strict';

async function separate(list) {
  const a = [];
  const b = [];

  for (const listelement of list) {
    try {
      await callApiFunction(options);
      a.push(listelement);
    } catch (err) {
      b.push(listelement);
    }
  }

  return [a, b];
}

separate([1, 2, 3]).then(([good, bad]) => {
  console.log(`Success:\n${good.join('\n')}\n\nErrors:\n${bad.join('\n')}\n`);
});
  相关解决方案