【发布时间】:2016-03-13 14:43:48
【问题描述】:
所以我很难弄清楚如何创建一个适用于不同 firebase 查询/不同承诺的函数。
考虑一下这个promise,它将一个空的输出数组转换为查询/promise的返回数据。
//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})
我仍然需要以编程方式将这些数据存储在一个数组中,我只是想不通。
所以回头看看我上面的第二个 sn-p 代码(我的函数)第二个参数是我要传递的数组,我选择的数组将填充数据,但赢了也不行。如果我进一步简化我的功能,我就会开始看到奇怪的东西。
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 它返回一个对象时,它显然是一个数组。有人可以详细说明吗?
我有一种感觉,我最终将不得不为我将来要进行的每个查询手动编写一个承诺,我只是想知道是否有更有效的方法来做到这一点。
【问题讨论】:
标签: javascript firebase promise