Firestore web code sample gives invalid argument t

2020-07-26 06:53发布

I am trying out the new Firestore by Firebase. When I run the code sample from https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0, I am getting an error.

// 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

Edit: Sorry I didnt mention I am using GWT and JSNI, it's working fine without gwt

5条回答
Explosion°爆炸
2楼-- · 2020-07-26 07:32

Quick workaround

var city: any;
city = Object.assign({}, {
    name: "Tokyo",
    country: "Japan"
});
db.collection("cities").add(city)
查看更多
地球回转人心会变
3楼-- · 2020-07-26 07:36

Seems like GWT is producing some custom object like the error says, so as workaround I am using a non JSNI convert method function to create objects like this

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

Still just a workaround and would love to know if there is a better solution..

查看更多
We Are One
4楼-- · 2020-07-26 07:39

This is likely a cross-window issue: GWT code runs in an iframe; if Firebase is looking for a "bare object", it likely compares the object's constructor, which won't be the expected one if the object crosses the iframe boundary.

Maybe try using a new $wnd.Object() instead of {} or new Object().

查看更多
啃猪蹄的小仙女
5楼-- · 2020-07-26 07:41

I tried this code and it works with me if you have data comes as an Object from angular Form :

this.afs.collection("/products").add(Object.assign(product));
查看更多
萌系小妹纸
6楼-- · 2020-07-26 07:51

Add a document

Then you can try this:

db.collection("cities").add({
    'name': "Tokyo",
    'country': "Japan"
})
查看更多
登录 后发表回答