返回延迟的promise对象并解决它

mar*_*xin 3 javascript jquery deferred

我有一个形式的功能:

$.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();
}
Run Code Online (Sandbox Code Playgroud)

而现在的问题是:如何处理情况,何时group_id == $(this).val()?我想做的只是:

var members_deferr = $.get_members();

members_deferr.done(function() {
  ...
});
Run Code Online (Sandbox Code Playgroud)

一个想法是检查返回值的类型,但它不是很好.第二个想法是解决延迟setTimeout,但我不知道它是否安全.

还有其他想法吗?

Rem*_*ius 5

如果在当前选择了group_id并且您有组成员,则只需返回已解决的deferrent.将立即调用callback done(),无需检查返回类型.像这样的东西:

$.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();
}
Run Code Online (Sandbox Code Playgroud)