我使用React-native,Expo和Firebase Firestore 我有桌子
产品
项目
我想获取所有产品以及该产品所含物品的数量。 代码是:
export const getProducts = (callback) => {
const db = firebase.firestore();
let products = [];
db.collection('products').get().then((productsSnapshot) => {
productsSnapshot.forEach((_product, index, array) => {
let product = _product.data()
product.id = _product.id;
getItems(product._id, (items, error) => {
product.count = items.length;
products.push(product);
});
});
callback(products, null);
...
export const getItems = (productId, callback) => {
const db = firebase.firestore();
let items = [];
db.collection('items').where('productId', '==', productId).get()
.then((itemsSnapshot) => {
itemsSnapshot.forEach((_item) => {
let item = _item.data();
item.id = _item.id;
items.push(item);
});
callback(items, null);
...
我遇到的问题是getItems上的回调在之后运行,而.count从未获得值。
我尝试了异步等待,但是我不明白如何使用它,并且在使用Firestore时抛出了错误。使用回调是个坏主意吗?应该怎么做?
答案 0 :(得分:1)
您可以在其周围加上一个Promise,然后在其中放置回调。像这样...
new Promise((resolve, reject) => {
db.collection('products').get().then((productsSnapshot) => {
productsSnapshot.forEach((_product, index, array) => {
let product = _product.data()
product.id = _product.id;
getItems(product._id, (items, error) => {
product.count = items.length;
products.push(product);
});
});
resolve();
});
}).then(function () {
callback(products, null);
});