我正在试用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工作正常
这可能是一个跨窗口问题:GWT代码在iframe中运行;如果Firebase正在寻找“裸对象”,它可能会比较对象的构造函数,如果对象穿过iframe边界,它将不是预期的构造函数。
也许尝试使用new $wnd.Object()
而不是{}
或new Object()
。
快速解决方法
var city: any;
city = Object.assign({}, {
name: "Tokyo",
country: "Japan"
});
db.collection("cities").add(city)
好像GWT正在生成一些自定义对象,如错误所示,因此解决方法我使用非JSNI转换方法函数来创建这样的对象
function convertObject(data) {
var obj = {}
Object.keys(data).forEach(function(key,index) {
console.log(key);
obj[key] = data[key];
});
return obj;
}
仍然只是一个解决方法,并希望知道是否有更好的解决方案..
我试过这个代码,如果你有数据来自角形式的对象,它可以和我一起使用:
this.afs.collection("/products").add(Object.assign(product));