jQuery Deferred只返回循环中的最后一个值
jQuery Deferred returns only last value in loop
所以我正在尝试通过一个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() 方法的放置有关,但我没有找到如何改变这种行为的可能性。
Firebase是一个实时数据库。事件流在服务器上发生更改时。您正在尝试采用此实时模型并将其强制进入 CRUD 策略,并对数据执行 GET 操作。更好的解决方案是在修改值时实时更新值。
请参阅 AngularFire、ReactFire 或 BackboneFire,了解如何使用自己喜欢的绑定框架执行此操作的示例。
为了直接回答这个问题,如果你想检索数据的静态快照,你想对value
事件使用 once() 回调,而不是来自 child_added
的实时流:
Ref.orderByChild("location").equalTo(searchLocation).once("value", function(snapshot) {
def.resolve(snapshot.val());
});
相关文章:
- Jquery append oly获取循环Rails中的最后一个elemen
- 循环以检查数组中的最后一个图像
- Foreach循环只返回最后一个值
- jQuery:在for循环中运行youtube视频,播放最后一个视频
- 在元素数组上循环只会影响最后一个元素
- 在循环中添加addEventListener()只适用于最后一个按钮
- Parse.com在循环中保存对象,只保存最后一个对象
- ..的Javascript..循环中的对象没有在最后一个属性上运行
- 第一个元素和最后一个元素之间的连续循环
- jQuery使用最后一个参数在Javascript循环中单击绑定函数
- angular for循环返回最后一个值
- Gmaps API-在循环中添加事件侦听器总是指向最后一个标记
- ajax 返回带有循环的图像长度,检查最后一个循环
- 如何避免在将索引作为函数的参数发送时引用for循环中的最后一个索引
- Javascript - 循环访问对象数组,仅显示最后一个对象
- 从 for 循环内的 AJAX 链中的最后一个 AJAX 请求返回值
- 使用 jQuery 创建动态元素 单击事件始终返回 for 循环中的最后一个索引
- jQuery点击函数在for循环中只在最后一个循环中工作
- for() 中的最后一个循环
- javascript做while,不写最后一个循环