私はこのような同様の質問が1000回聞かれたことを知っていますが、私の一生の間、私は非常に単純だと感じる何かに苦労しています。
2つのテーブルがあります。1つはorder_linesと呼ばれ、もう1つはorder_lines_metaと呼ばれます。最初にorder_linesをクエリし、各行についてorder_lines_metaを取得してそれを返す必要があります。
私は多くのバリエーションを試しましたが、ここで立ち往生しています。nodejsがorder_linesを出力した後にデータが来るため、order_lines_metaが戻るのを待つ必要があります。そうしないと、空白のmetaDataが取得されます。
最後に、注文情報、オブジェクトのラインアイテム、およびラインアイテム内のメタデータオブジェクトを含むオブジェクト
助けに感謝します、私はこれで私の脳を包むことができないようです、そして私は確かにこれを行う他の方法にもオープンです
nodejs、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
ます。
ただし、データベース上で2つのデータベースコレクションを結合し、1回の操作ですべてを取得する方が簡単で高速なのではないかと思いますdb.collection
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加