Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore,应用基于位置的动态筛选_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript Firestore,应用基于位置的动态筛选

Javascript Firestore,应用基于位置的动态筛选,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我试图根据不同的标准(如烹饪、口味、饮食等)筛选一系列产品/菜肴 我将这些过滤器作为json对象传递,如下所示: { "tagDiet": [ "halal", "vegan" ], "tagCuisine": [ "Other" ], "price": [9.99] } 现在,我想将这些过滤器传递到过滤集合的fireba

我试图根据不同的标准(如烹饪、口味、饮食等)筛选一系列产品/菜肴

我将这些过滤器作为json对象传递,如下所示:

 {
  "tagDiet": [
    "halal",
    "vegan"
  ],
     "tagCuisine":  [
    "Other"
  ],
  "price": [9.99]
}
现在,我想将这些过滤器传递到过滤集合的firebase functions端点,该端点的代码包含我要修复的代码段:

const filters: any = request.body;
let query: any = productsRef;
console.log(filters)
let data: Array < any > = [];
if (filters.hasOwnProperty('price')) {
    let price = filters.price;
    delete filters['price'];
    let maxPrice = Math.max(price);
    console.log(maxPrice, price, filters);
    query = await query.where('price', '<=', maxPrice);
}
await Object.keys(filters).map(async (key: string) => {
    console.log(key, filters[key]);    
    query = await query.where(key, 'IN', filters[key]);
})
const过滤器:any=request.body;
let query:any=productsRef;
console.log(过滤器)
let数据:数组=[];
if(filters.hasOwnProperty('price')){
让价格=过滤器价格;
删除过滤器[‘价格’];
设maxPrice=Math.max(price);
log(maxPrice、price、过滤器);

query=等待查询。其中('price','在此行中使用大写字母:

query = await query.where(key, 'IN', filters[key]);
应该是

query = query.where(key, 'in', filters[key]);

请注意,我已经删除了
wait
关键字:
where()
不是异步方法,因此您不需要使用
wait
。另一方面,您确实需要将
wait
与异步
get()
方法一起使用


await Object.keys(filters).map(async(key:string)=>{..})相同;
:此处无需使用
async/await

对Renaud的注释进行一点扩展:
.where()
返回一个完全在本地的新查询-它实际上根本不访问Firestore-这就是为什么它是一个同步操作,不需要
wait
现在就有意义了,谢谢
query = await query.where(key, 'IN', filters[key]);
query = query.where(key, 'in', filters[key]);