我知道类似的问题已经被问过1000次了,但对于我来说,我一直在努力解决一些我觉得很简单的问题.

我们有两个表,一个叫做order_lines,另一个叫做order_lines_meta,我需要首先查询order_lines,然后为每一行获取order_lines_meta并返回它

我已经try 了很多变化,这就是我所处的位置,我需要它等待order_lines_meta返回,因为否则当数据在nodejs已经输出order_lines后返回时,我会得到空白元数据

最后是一个对象,其中包含订单信息、对象的行项目和行项目内的元数据对象

非常感谢你的帮助,我似乎无法在这件事上下定决心,我当然也愿意用其他方式来做这件事

使用 node 、express、typescript和firestore

const orderNumber = req.query.orderNumber as string;
const customerName = req.query.customerName as string;
const orderDate = req.query.orderDate as string;

const pickListObj = {
      orderNumber: orderNumber,
      customerName: customerName,
      orderDate: orderDate,
      line_items: <any>[],
    };

db.collection('order_lines').where('number', '==', orderNumber).get().then((snap) => {
      const promises = <any>[];

      snap.forEach(async (order: any) => {
      // get meta data
        const metaDataObj = <any>[];
        const productName = order.data().name;
        const productQty = order.data().quantity;

        promises.push(db.collection('worder_line_meta').where('lineId', '==', order.data().lineId).get().then((doc: any) => {
          if (doc.display_value != '') {
            const meta = [{display_key: doc.data().display_key, display_value: doc.data().display_value}];
            metaDataObj.push(meta);
          }
        }));
      });
      return Promise.all(promises);
    }).then(() => {
      pickListObj.line_items.push({name: productName, quantity: productQty, meta_data: metaDataObj});
    });

推荐答案

push语句从上一个.then移到上一个.then中:

promises.push(db.collection('worder_line_meta')...then((doc: any) => {
  if (doc.display_value != '') {
    ...
  }
  pickListObj.line_items.push({name: productName,
                               quantity: productQty,
                               meta_data: metaDataObj});
}));

在最后.then页中,你会找到完整的pickListObj页.

然而,我想知道,将数据库上的两个数据库集合连接起来,并用一个db.collection操作检索所有内容是否会更简单、更快.

Node.js相关问答推荐

Node.js promise 循环中的所有多个API调用

可以删除一个mongodb catch块

我的位置也移动时左右拖动谷歌 map

Windows上使用ES6+的OpenAPI规范的Express服务器不接受嵌套路由'

Nest Js - 在 multer 拦截器中如何设置最大文件上传大小并进行可选文件上传

Mongodb - 在数组数组中查找()

在nodejs中为oauth请求创建和存储csrf令牌的最佳方法

在mongoose虚拟属性中处理异步操作

每个数组值在 mongodb 中查找一个文档

Zod 模式中的self 数组

带权限的机密 Rest-Api - 总是 403 - 我做错了什么?

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

我可以通过 JNI 从 Node.js 调用 Java 吗?如何?

适用于 Windows 的 NVM 无法正常工作?

Sequelize 基于关联的查找

Express.js:没有这样的文件或目录

__dirname 未在 Node 14 版本中定义

Fluxible 中的脱水和再水合代表什么?

Route.get() 需要回调函数,但得到对象未定义

Mongoose:模式与模型?