听多个承诺来完成
Listen for multiple promises to complete
本文关键字:承诺 更新时间:2023-09-26
这在第一次调用时很好,但无论我是否"重置"延迟对象,$.when
都只会触发一次,除非我在单击处理程序中重新绑定它。
有没有什么方法可以让全球听众听到几个可以重新设定的承诺?
我也考虑过定制活动和酒吧/酒吧模式。它们对单个事件非常有效,但我想不出在下面的场景中使用它们的好方法。
var dfd1 = $.Deferred(), dfd2 = $.Deferred();
$('input').on('click', function(){
dfd1 = $.Deferred();
dfd2 = $.Deferred();
f1();
f2();
});
$.when.apply($, [dfd1, dfd2]).then(function(schemas) {
console.log('done');
});
function f1(){
setTimeout(dfd1.resolve, 500);
}
function f2(){
setTimeout(dfd2.resolve, 600);
}
f1();
f2();
http://jsfiddle.net/C62gh/
TL;DR:每次创建新的延迟时,您都必须再次调用$.when
。
代码的问题在于,您没有"重置"延迟对象(事实上,它们不能被重置(——您正在用对其他(未解决的(延迟的引用替换对这些对象的一些引用。
请注意,我说了一些引用,因为要替换的引用不是唯一的:传递给$.when
的数组包含对相同延迟的单独引用,当然这些引用没有被替换。即使他们知道,$.when
也没有办法知道这一点,即使它想知道。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 承诺合并流
- JavaScript承诺-无法读取属性'那么'的未定义
- 等待循环调用的所有承诺完成
- Pg承诺性能提升:在冲突中
- 如何判断请求/承诺是否需要超过5秒才能完成,angular js