Firestore Web代码示例提供无效的参数类型

问题描述 投票:1回答:5

我正在试用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()要求其第一个参数是object类型,但它是:一个自定义Object对象

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

javascript firebase gwt jsni google-cloud-firestore
5个回答
2
投票

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

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


2
投票

快速解决方法

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

0
投票

Add a document

然后你可以尝试这个:

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

0
投票

好像GWT正在生成一些自定义对象,如错误所示,因此解决方法我使用非JSNI转换方法函数来创建这样的对象

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

仍然只是一个解决方法,并希望知道是否有更好的解决方案..


0
投票

我试过这个代码,如果你有数据来自角形式的对象,它可以和我一起使用:

this.afs.collection("/products").add(Object.assign(product));
© www.soinside.com 2019 - 2024. All rights reserved.