【发布时间】:2015-02-01 12:11:23
【问题描述】:
所以我试图通过一个 Firebase 数据库来查找数据库中符合条件的条目。因此,我使用 jQuery 的延迟对象来处理数据库调用。
一旦我从第一个数据库获得返回值,我想从第二个数据库获取第一个数据库中每个值的用户信息。然后将结果添加到 JSON 数组中
所以它:
<search for value, find one>
<<<search other db for oher info>>>
<continue search for outer value>
但这只返回一个值 - 尽管其他一切都运行良好(并且控制台记录了所有信息正确)。
代码如下:
function find(searchLocation, profileID) {
var requestUserData = {
data: []
};
var def = $.Deferred();
//This will be executed as long as there are elements in the database that match the criteria and that haven't been loaded yet (so it's a simple loop)
Ref.orderByChild("location").equalTo(searchLocation).on("child_added", function(snapshot) {
def.ressolve(snapshot.val().ID);
});
return def.promise();
};
我希望你们对我该怎么做或如何解决这个问题有任何想法。提前致谢!
编辑:经过进一步测试,我发现这个问题已经存在于外循环中——所以只有第一个值被返回。我认为这与 resolve() 方法的位置有关,但我没有找到如何改变这种行为的可能性。
【问题讨论】:
-
notify在循环中,resolve在完成时 -
这会导致 resolve() 在第一次运行查询完成之前执行,所以我得到一个空对象作为返回值
-
详细说明:计算结果集的总长度。
notify()完成的每个项目。当您达到集合的总长度时,您resolve()延迟对象。 -
谢谢,我要弄清楚如何在 Firebase 中获取结果集的长度
-
这里似乎完全不需要延迟。这是实时流数据的事件处理程序,而不是一次性结果。对于静态快照,您希望使用 once('value') 而不是 on('child_added')。此外,您的代码中存在错误(解决与解决),表明它未经测试并且问题缺乏尽职调查。
标签: javascript jquery loops firebase jquery-deferred