2017-10-07 87 views
0

我正在尝试Firebase的新Firestore。当我从https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0运行代码示例时,出现错误。Firestore Web代码示例提供了无效的参数类型

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

+0

从快速扫描您的代码看起来是正确的,这让我想知道是否从样本复制了一些不可打印的字符。你可以尝试输入你传入的JSON对象,看看是否有所作为? –

+0

我再次输入,没有区别 –

+0

嗯....在这种情况下,我不知道。希望别人有更好的主意。 –

回答

0

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

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

+0

中工作解决了它,非常感谢:D –

1

快速的解决方法

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

给我同样的错误 –

+0

,但为什么?为什么我们必须创建一个新的对象 – Ruben

+0

谢谢,@ thomas-broyer,这是因为envs –

0

Add a document

那么你可以试试这个:

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

不同,不能在JSNI –

0

看来,像GWT是生产一些自定义对象,从而解决办法我使用非JSNI转换方法函数来创建类的错误说这样

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

对象仍然只是一种变通方法,很想知道是否有更好的解决办法..