[英]TypeScript and Firebase cloud functions: object is of type 'unknown'
我正在尝试使用 TypeScript 制作 Firebase 云函数。 我有以下使用承诺的代码:
const pro_books = new Promise((resolve,reject)=>{
resolve(db.child("Books").orderByChild("avg_rating").limitToFirst(15));
})
pro_books
.catch((error) => {
console.log("Recommendations: Error loading books");
})
.then((list_book) => {
book_id_arr = (list_book).map((x:string)=>{
const book:Book = JSON.parse(x);
return book.id;
})
}).catch(() => 'obligatory catch');
问题在于映射函数,特别是对于 list_book(在 try 块内的第一行),我得到的错误(在构建期间)是“对象类型为‘未知’”。 list_book 应该是我运行的查询的结果,所以它可能是某种 JSON 文档数组,我尝试强制执行一种类型,但我无法确切地弄清楚如何去做,以及使用哪种类型。
编辑: book_id_arr 之前定义为let book_id_arr:String[] = new Array();
db.child("Books").orderByChild("avg_rating").limitToFirst(15)
不是Query
的结果。 它只是查询的声明。
如果要获取结果,则需要调用get()
方法或设置 listener 。
在您的情况下,您应该使用get()
方法,该方法返回将使用QuerySnapshot
解析的QuerySnapshot
,因此您无需将其包装在新的 Promise 中。
如果要在结果QuerySnapshot
上使用map()
,则需要调用其docs
属性,该属性返回“QuerySnapshot 中所有文档的数组”。
以下应该可以解决问题:
const pro_books_query = db.child("Books").orderByChild("avg_rating").limitToFirst(15);
return pro_books_query.get()
.then((list_book) => {
book_id_arr = list_book.docs.map(...);
return ...
})
.catch(err =>
console.log("Recommendations: Error loading books - " + err);
return null;
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.