在jQuery中返回promise()或deferred有什么区别

What is the difference of returning a promise() or a deferred in jQuery?

本文关键字:deferred 什么 区别 jQuery 返回 promise      更新时间:2023-09-26

假设我有一个ajax方法,它没有返回的承诺,所以我会做这样的事情:

promises.setPreferredService = function(id) {
  var deferred = $.Deferred();
  nsAddressAjaxService.setPreferredAddress(id, {
    callback: function(data) {
      deferred.resolve(data);
    }
  });
  return deferred.promise(); // I could also return only `deferred`
};

在我的方法的返回中,我可以返回deferred.promise(),也可以只返回deferred,我可以同时返回这两个:

promises.setPreferrredService.done(callback);

那么返回deferred.promise()和只返回deferred有什么区别呢?

那么返回deferred.promise()和只返回deferred有什么区别呢?

您希望返回deferred.promise(),这样调用代码就不能调用resolvereject或其他Deferred特定的方法。这不是调用者应该访问的东西。它应该只能消费promise,而不能影响其状态。

您不应该公开deferred,而应该只公开只读promise

deferred是控制动作完成的机制,但promise只是看到结果的一种方式。您不希望外部方法能够完成拒绝操作。

promise不会公开允许解析它的接口。您只能等待结果并对其进行操作。

延期不仅仅是一个承诺,它还允许您解决或拒绝它。

如果返回实际的deferred,那么调用者可以通过调用deferred.resolve()resolve。您希望返回promise,以便调用者可以将其链接起来,等等,但实际上并没有决定其解决方案。