expressJs - 在循环中等待承诺

时间:2017-09-12 10:07:06

标签: node.js express

新手问题;我需要创建一个条件循环来调用数据库。 promise中返回的值确定我是否应该按如下方式退出循环:

let id, caged;

do {
    caged = false;

    id = models.Cage.generateId();
    caged = models.Cage.findOne({ where: { dispatchLabelId: id } });

} while( caged );

有人可以建议我如何构建我的代码吗?

1 个答案:

答案 0 :(得分:1)

你可以使用promises和递归函数调用来做到这一点:

let getCage = () => {
  return models.Cage
    .generateId()
    .then(id => models.Cage.findOne({ where: { dispatchLabelId: id } }))
    .then(caged => {
      if (caged) {
        return caged;
      }
      return getCage();
    });
}

如果您可以使用node.js v7.6或更高版本,则可以避免使用递归函数调用并使用async/await实现此目的:

let getCage = async () => {
  try {
    do {
      let id = await models.Cage.generateId();
      let caged = await models.Cage.findOne({ where: { dispatchLabelId: id } });
      if (caged) {
        return caged;
      }
    } while (true);
  } catch (err) {
    console.log(err);
  }
}