javascript - 如何将 Promise 与嵌套 foreach 一起使用

标签 javascript node.js express sequelize.js

我在嵌套的 foreach 循环中找到所有用户的钱包,但我无法弄清楚在哪里使用resolve() 进行返回回调,

function genwallets() {
    return new Promise((resolve, reject) => {
    var i = 0;
    try {
        db.users.findAll({}).then((users)=>{
            db.supportedTokens.findAll({}).then((tokens)=>{ 
                users.forEach(function(user) {
                    tokens.forEach(function(token) {
                    db.wallets.findOne({where:{userId: user['id'], supportedTokenId: token['id']}}).then((wallet)=>{
                        console.log(JSON.stringify(wallet));
                    })
                    });
                });
            })
        });

    } catch (err) {
        console.log(err);
    }
});
}

最佳答案

forEach 不适用于 Promise。使用 for...ofPromise.all 这样的东西

function genwallets() {
  return new Promise((resolve, reject) => {
    var i = 0;
    try {
      db.users.findAll({}).then(users => {
        db.supportedTokens.findAll({}).then(tokens => {
          for(const user of users) {
            for(const token of tokens) {
              db.wallets
                .findOne({
                  where: { userId: user["id"], supportedTokenId: token["id"] }
                })
                .then(wallet => {
                  console.log(JSON.stringify(wallet));
                });
            }
          }
        });
      });
    } catch (err) {
      console.log(err);
    }
  });
}

顺便说一句,您不需要将其包装在 Promise 中。

您可以使用async/await来简化此操作

async function genwallets() {
  const users = await db.users.findAll({});
  const tokens = await db.supportedTokens.findAll({});

  for(const user of users) {
    for(const token of tokens) {
      const wallet = await db.wallets
        .findOne({
          where: { userId: user["id"], supportedTokenId: token["id"] }
        });
    }
  }
}

关于javascript - 如何将 Promise 与嵌套 foreach 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60706243/

相关文章:

javascript - 如何删除 Mongoose 文档并从另一个模型引用它?

javascript - 使用 ts-node 的 Typescript 声明合并无法按预期工作

javascript - 无法读取 ReactJS 中未定义的属性 'state' (Gatsby)

javascript - Three.js - 在 THREE.Points 上用于透明 Canvas 纹理贴图的 depthWrite 与 depthTest

javascript - Firebase:FacebookAuthProvider 不是构造函数

node.js - 如何在 Controller 中使用两个 "show"方法?

sockets - nodejs中的套接字

javascript - 虚拟地球 - 只有 map 不渲染

r - 使用 iGraph 中的 ego 函数生成连接 Node 列表以通过函数进行解析

node.js - socket.emit 不向发送者发送消息