jQuery承诺:是否有可重复使用的替代方案
jQuery promises: Is there a reusable alternative?
我正在构建一个web应用程序,它有一组功能,用户可以执行几次,但涉及到足够多的异步操作,以便回调变得有点失控。
$.Deffered
和$.when
有哪些可以多次"使用"的现实替代方案?
- 我不是在寻找一个全面的框架
- 我不想(直接)使用回调
我认为您要查找的是事件。jQuery中使用on和触发器的一个示例:
var data_handler = $({});
function get_data(new_foo) {
// Do stuff, then send the event
data_handler.trigger('new_data', {foo: new_foo});
}
data_handler.on('new_data', function(e, data) {
console.log('Handler 1: ' + data.foo);
});
data_handler.on('new_data', function(e, data) {
console.log('Handler 2: ' + data.foo);
});
get_data(1);
get_data(2);
输出:
Handler 1: 1
Handler 2: 1
Handler 1: 2
Handler 2: 2
这里有3个这样的库:
- Q
- rsvp.js
- 当.js
这些库并不是"全面"的。他们只是履行承诺。
您可以在promise周围制作一个包装器,而不是直接附加到promise,该包装器允许回调订阅以设定间隔进行的重复promise或Ajax调用:
var cycle = function(func, interval){
var _this = this;
// Use jQuery's triggers to manage subscriptions
var o = $({});
this.publish = o.trigger.bind(o);
this.subscribe = o.on.bind(o);
this.unsubscribe = o.off.bind(o);
var call = function(func){
clearTimeout(_this.timeout);
func().done(function(response){
_this.publish('ajax:update', response);
_this.timeout = setTimeout(function(){
call(func);
}, interval);
});
};
call(func);
return this;
};
var ajax_promise = function(){
return $.getJSON('http://localhost/some/data.json');
};
var my_callback = function(response){
// Do stuff
};
cycle(ajax_promise, 10000).subscribe('ajax:update', my_callback);
相关文章:
- 轻量级zxcvbn替代方案
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- ng映射方向备选方案
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 为什么$.brower被弃用?还有什么更好的替代方案
- 执行php函数的onclick事件的其他替代方案
- 承诺在非节点式回调上使用Bluebird
- Android上URL方案的替代方案
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 节点和异步/等待,承诺...哪种解决方案最好
- Ember RSVP承诺解决firefox插件端口消息传递方案无法解决的模型
- AngularJs:返回已经找到的嵌套$http解决方案的承诺,但为什么它能工作
- jQuery承诺:是否有可重复使用的替代方案
- 除了绑定之外,任何其他上下文解析的解决方案都在承诺中