所以我很难搞清楚如何创建一个适用于不同的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