所以我很難搞清楚如何創建一個適用於不同的firebase查詢/不同的承諾的函數。創建一個承諾回調
考慮這個承諾,它會將空輸出數組轉換爲查詢/承諾的返回數據。
//userKeys is an array with my 'queries'
Promise.all(userKeys.map(function(key) {
return database.child(key).once("value") //Returns a promise
})).then(function(respond) {
userData = respond;
});
這很好用。所以我想我會創建一個函數來處理不同的查詢,那就是我剛到達死衚衕的地方。
所以我只會換我以前的代碼在功能
function query(keys, array) {
return Promise.all(keys.map(function(key) {
return ref.child(key).once("value")
})).then(function(respond) {
array = respond; //This won't work
return respond;
});
}
所以,我想回到應許,然後我就可以做到這一點上
someQuery = query(queryKeys);
someQuery.then(function(data){ //Manual written array to store data here
queryResults = data})
我仍然需要存儲數據一個程序化的數組,我無法弄清楚。
所以回頭看看我上面的第二段代碼(我的函數)第二個參數是我想要傳遞的一個數組,我的選擇數組將填充數據,不管工作。如果我更簡化我的功能,我會開始看到奇怪的事情。
output = [];
function modify(arrayName) {
var data = ["1", "2", "3", "4"];
arrayName = data; //Doesnt work
arrayName = data.slice() //Doesnt work
arrayName.push(data) //Works, but I don't want to push I want to copy
}
modify(output); //Output will stay empty
爲什麼我的輸出數組保持爲空?這是正常的嗎?另外,當我控制檯登錄arrayName時,它會返回一個對象,當它清楚地顯示一個數組時。有人可以詳細說明嗎?
我有一種感覺,我最終必須爲將來每次查詢時手動編寫一份承諾,我只是想知道這是否是一種更有效的方式。
但是,請不要。這實際上不是承諾如何使用。 –
@MadaraUchiha你指的是答案的第一部分,拼接和應用? – Nickolay
@MadaraUchiha最後一次數據加載後,它將使用angularJS在視圖中呈現。那麼Nickolay做錯了什麼?而Nickolay,那是錯誤的,我必須爲每個承諾單獨做。我想不出有什麼辦法可以做到這一點,我知道我不會收到任何反饋,但我不認爲我需要它,因爲無論如何,只要它加載,我就會將它呈現在我的視圖中。 – Abdel