arrays - 当我 console.log 相同的数组时,我得到两个不同的值
问题描述
我有一个函数可以从我的 firstore 数据库中获取带有 id 的产品。当我 console.log 订阅中的数组时,我得到:
console.log(product[0]) -> Object { id: 0, quantity: 1, latinName: "stub", price: "10", name: "foo", }
console.log(product) -> [{ id: 0, quantity: 1, latinName: "stub", price: "10", name: "foo", }]
这很好而且很正常,但是当我在订阅之外执行 console.log 时。我想返回数组的地方我得到不同的值。然后我得到:
console.log(product[0]) -> undefined
console.log(product) -> [{ id: 0, quantity: 1, latinName: "stub", price: "10", name: "foo", }]
这是我获取数据并返回它的代码
getProductfromDBByID(id: number): Observable<any> {
let product: Array<any> = [];
this.firestore
.collection('products', (ref) => ref.where('id', '==', id))
.get()
.subscribe((querySnapshot) => {
querySnapshot.forEach((doc) => {
product.push(doc.data());
console.log('product in subscribe ', product[0]);
});
});
console.log('product return value', product[0]);
return of(product);
}
解决方案
在函数名前添加“async”关键字,在future方法前添加“await”关键字,即“this.firestore......”
async getProductfromDBByID(id: number): Observable<any> {
let product: Array<any> = [];
await this.firestore
.collection('products', (ref) => ref.where('id', '==', id))
.get()
.subscribe((querySnapshot) => {
querySnapshot.forEach((doc) => {
product.push(doc.data());
console.log('product in subscribe ', product[0]);
});
});
console.log('product return value', product[0]);
return of(product);
}
推荐阅读
- html - CSS中的“显示更多/更少”有问题
- sql - 用其他需要的数据消除数据中的 NULL 值
- c++ - 移动和模板化构造函数,取错了一个
- vue.js - Vue 组件已注册但 Vue 仍然警告 Unknown custom element
- angular - 动态加载的组件与现有组件(Angular)之间的交互
- html - 超出 div 标签的图像
- apache-kafka - Kafka 错误:无法找到或加载主类 kafka.admin.topiccommand
- python - 使用 normalize 展平三重嵌套 JSON
- php - 将给定的相对 url 转换为绝对 url
- c# - 如何取消转义 URL 中的特殊字符?