繁体   English   中英

TypeScript 和 Firebase 云函数:对象的类型为“未知”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM