本文介绍了返回延迟的诺言对象并解决它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数,形式为:

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

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

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

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

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.

还有其他想法吗?

推荐答案

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

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

这篇关于返回延迟的诺言对象并解决它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 19:41