Firestore 网络代码示例给出了无效的参数类型

Firestore web code sample gives invalid argument type

我正在试用 Firebase 的新 Firestore。当我 运行 来自 https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 的代码示例时,出现错误。

// Add a new document with a generated id.
db.collection("cities").add({
    name: "Tokyo",
    country: "Japan"
})
.then(function(docRef) {
    console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
    console.error("Error adding document: ", error);
});

Exception caught: (FirebaseError) : Function CollectionReference.add() requires its first argument to be of type object, but it was: a custom Object object

编辑: 抱歉,我没有提到我正在使用 GWT 和 JSNI,它在没有 gwt

的情况下工作正常

快速解决方法

var city: any;
city = Object.assign({}, {
    name: "Tokyo",
    country: "Japan"
});
db.collection("cities").add(city)

Add a document

那你可以试试这个:

db.collection("cities").add({
    'name': "Tokyo",
    'country': "Japan"
})

似乎 GWT 正在生成一些自定义对象,就像错误所说的那样,因此作为解决方法,我正在使用非 JSNI 转换方法函数来创建这样的对象

function convertObject(data) {
    var obj = {}
    Object.keys(data).forEach(function(key,index) {
        console.log(key);
        obj[key] = data[key];
    });
    return obj;
}

仍然只是一种解决方法,很想知道是否有更好的解决方案..

这可能是一个交叉 window 问题:GWT 代码在 iframe 中运行;如果 Firebase 正在寻找 "bare object",它可能会比较对象的构造函数,如果对象跨越 iframe 边界,这将不是预期的构造函数。

也许可以尝试使用 new $wnd.Object() 而不是 {}new Object()

我试过这段代码,如果你有来自 angular Object 的数据,它对我有用 表格 :

this.afs.collection("/products").add(Object.assign(product));