我有一个形式的功能:

$.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();
}

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

members_deferr.done(function() {
  ...
});

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

还有其他想法吗?

最佳答案

如果当前选择了group_id并且您有组成员,则只需返回已解决的延迟。回调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();
}

10-02 17:21