我目前在某种程度上陷入了比赛状态,并且正在拔头发。本质上,我要查询一个API,将结果添加到数据库中,然后对返回/保存的数据进行处理。

我不是在问这个特定的问题,而是在询问如何解决这类问题的设计模式。 p.push(formatter.createAccounts(account, id));行可能最多运行1000次,可能需要20秒左右的时间。

任何关于我做错事情的想法都会很有帮助

谢谢,
奥利



// get all users
Promise.all(updatedUsers)
.then(() => {
  // create an array of promises
  const p = [];

  users.then((user) => {
    ...
    ids.forEach((id) => {
      const accounts = foo.getAccounts(id, true); // returns a promise
      accounts.then((account) => {
        // add the return data from here to the promise array at the bottom
        p.push(formatter.createAccounts(account, id));
      });
    });
  });

  // this would ideally be a promise array of the data from above - but instead it just evaluates to [] (what it was set to).
  Promise.all(p).then(() => {
    // do my stuff that relies on the data here
  })
});

最佳答案

问题是您没有将foo.getAccounts诺言包含到诺言数组中。修改版本:

Promise.all(updatedUsers)
.then(() => {

  users.then((user) => {
    return Promise.all(ids.map(id => {
      //for each ID we return a promise
      return foo.getAccounts(id, true).then(account => {
        //keep returning a promise
        return formatter.createAccounts(account, id)
      })

    }).then((results) => {
      //results is an array of the resolved values from formatter.createAccounts
      // do my stuff that relies on the data here
    })
  })

 //rest of closing brackets

关于javascript - promise 和种族条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47516185/

10-10 12:56