admin管理员组文章数量:1326069
I have a function in form:
$.get_members = function() {
var group_id = $('#gid').val();
if($(this).val() == group_id)
return;
var deferr = $.Deferred();
$.get(url)
.done(function() {
...
deferr.resolve();
});
return deferr.promise();
}
And now the question is: how to handle situation, when group_id == $(this).val()
? I would like to do just:
var members_deferr = $.get_members();
members_deferr.done(function() {
...
});
One idea is to check type of returned value, but its not very nice. Second idea is to resolve deferred in setTimeout
, but I don't know if it is safe.
Any other ideas?
I have a function in form:
$.get_members = function() {
var group_id = $('#gid').val();
if($(this).val() == group_id)
return;
var deferr = $.Deferred();
$.get(url)
.done(function() {
...
deferr.resolve();
});
return deferr.promise();
}
And now the question is: how to handle situation, when group_id == $(this).val()
? I would like to do just:
var members_deferr = $.get_members();
members_deferr.done(function() {
...
});
One idea is to check type of returned value, but its not very nice. Second idea is to resolve deferred in setTimeout
, but I don't know if it is safe.
Any other ideas?
Share Improve this question edited Feb 25, 2014 at 13:35 marxin asked Feb 25, 2014 at 13:30 marxinmarxin 3,9224 gold badges34 silver badges47 bronze badges 03 Answers
Reset to default 5If in case group_id is currently selected and you have group members you just need to return resolved deferrent. Callback done() will be called right away, no need to check return type. Something like this:
$.get_members = function() {
var group_id = $('#gid').val();
var deferr = $.Deferred();
if($(this).val() == group_id) {
deferr.resolve();
}
else {
$.get(url)
.done(function() {
...
deferr.resolve();
});
}
return deferr.promise();
}
I'm not quite sure what you are trying to do if val == group_id. Is this what you mean?
$.getMembers = function() {
if ($(this).val() == $('#gid').val())
{
return $.Deferred().reject().promise();
}
return $.get(url).then(function() {
// ...
}).promise();
}
Late answer due to busy spell ...
The question hints at a jQuery plugin. If that is what you want, then you could do something like this :
(function($){
var pluginName = 'get_members';
$.fn[pluginName] = function(url, otherValue) {
var $this = $(this).eq(0),
data = $this.data(pluginName);
if(!data) {
data = {};
$this.data(pluginName, data);
}
if(otherValue === undefined || $this.val() !== otherValue) {
if(data.jqXHR) {
data.jqXHR.abort();
}
data.jqXHR = $.get(url).done(function(response, textStatus, jqXHR) {
...
});
}
return data.jqXHR || $.Deferred().reject(pluginName + ': conditions for fetching members have not been met');
}
})(jQuery);
//Normal usage
var promise_of_members = $("#myInputElement").get_members('http://my/url', $("#gid").val());
//or
var promise_of_members = $("#myInputElement").get_members('http://my/url', 'myComparisonString');
//Force get
var promise_of_members = $("#myInputElement").get_members('http://my/url');
Several design decisions needed to be made in writing this, so you might end up with something slightly different, depending on exactly what you want to do and how much control over the detailed behaviour you want to have.
本文标签: javascriptReturn deferred promise object and resolve itStack Overflow
版权声明:本文标题:javascript - Return deferred promise object and resolve it - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742196302a2431142.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论