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; 
} 

對象仍然只是一種變通方法,很想知道是否有更好的解決辦法..