【问题标题】:Waterline ORM assign the result of find to a variableWaterline ORM 将 find 的结果分配给一个变量
【发布时间】:2018-03-09 08:20:35
【问题描述】:

我想合并 2 个查询的结果,然后将它们作为一个返回,如下所示:

test: async (req, res) => {
  const valOne = TableOne.find({ id: id })
      .exec((err, result) => {
        if (err) {
          res.serverError(err);
        }
        return result;
      });
  const valTwo = TableTwo.find({ id: id })
      .exec((err, result) => {
        if (err) {
          res.serverError(err);
        }
        return result;
      });
  const data = {
    keyOne: valOne,
    keyTwo: valTwo,
  };
  res.json(data);
}    

我知道上面的代码不会返回,因为它是异步的。我怎样才能做到这一点?

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    您提供的信息不多:节点版本、帆版本等。

    这里有几种方法: 1. 使用承诺 2.使用回调链 3. 使用等待/异步

    如果您使用sails 1.0 和node >= 8,您最好的选择是使用await/async,所以您的代码应该是这样工作的:

    test: async (req, res) => {
      let valOne, valTwo;
    
      try {
        valOne = await TableOne.find({ id: id });
        valTwo = await TableTwo.find({ id: id });
      } catch (err) {
        return res.serverError(err); //or res.badRequest(err);
      }
    
      const data = {
        keyOne: valOne,
        keyTwo: valTwo,
      };
    
      res.json(data);
    }
    

    【讨论】:

    • 非常感谢。效果很好。如果我想使用 await,我不能在那里有 exec?
    • 不,您不能将 await 与 exec 混合使用,您也不需要这样做,await 会处理所有事情,您会在变量中获得结果,如果出现错误,您可以将其捕获catch 块。
    • 我建议你试试[valOne, valTwo] = Promise.all(TableOne.find(), TableTwo.find(),你也可以在catch之后和catch之前附加res.json
    猜你喜欢
    • 2012-10-13
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多