2

我正在试用 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);
});

异常捕获:(FirebaseError):函数CollectionReference.add()要求其第一个参数是对象类型,但它是:自定义对象对象

编辑:对不起,我没有提到我正在使用 GWT 和 JSNI,没有 gwt 也可以正常工作

4

5 回答 5

3

快速解决方法

var city: any;
city = Object.assign({}, {
    name: "Tokyo",
    country: "Japan"
});
db.collection("cities").add(city)
于 2017-10-08T05:22:34.537 回答
3

这可能是一个跨窗口问题:GWT 代码在 iframe 中运行;如果 Firebase 正在寻找“裸对象”,它可能会比较对象的构造函数,如果对象越过 iframe 边界,这将不是预期的构造函数。

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

于 2017-10-22T12:04:10.673 回答
1

我尝试了这段代码,如果你有数据来自 angular Form 的对象适用于我:

this.afs.collection("/products").add(Object.assign(product));
于 2018-09-17T12:19:10.820 回答
0

添加文档

然后你可以试试这个:

db.collection("cities").add({
    'name': "Tokyo",
    'country': "Japan"
})
于 2017-10-21T01:13:58.180 回答
0

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

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

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

于 2017-10-22T09:49:48.513 回答