在 jQuery 中返回 promise() 或 deferred 有什么区别?
What is the difference of returning a promise() or a deferred in jQuery?
假设我有一个 ajax 方法,它没有 return 的承诺,所以我会做这样的事情:
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`
};
在我的方法 return 中,我可以 return deferred.promise()
或只是 return deferred
两者我都可以这样做:
promises.setPreferrredService.done(callback);
那么 returning deferred.promise()
或仅 return deferred
有什么区别?
您不应公开 deferred
,而应仅公开 只读 promise
。
deferred
是控制动作完成的机制,而 promise
只是一种查看结果的方式。您不希望外部方法能够完成 或拒绝 操作。
承诺不会公开允许解析它的接口。您只能等待结果并对其进行操作。
延期不仅仅是一个承诺 - 它还允许您解决或拒绝它。
So what's the difference of returning deferred.promise()
or only return deferred
?
您想 return deferred.promise()
以便调用代码无法调用 resolve
或 reject
或其他特定于 Deferred 的方法。这不是调用者应该有权访问的内容。它应该只能消费 promise,而不会影响它的状态。
如果您 return 实际 deferred
,那么调用者可以通过调用 deferred.resolve()
resolve
它。您想要 return promise 以便调用者可以链接它等,但实际上并不决定其解决方案。
假设我有一个 ajax 方法,它没有 return 的承诺,所以我会做这样的事情:
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`
};
在我的方法 return 中,我可以 return deferred.promise()
或只是 return deferred
两者我都可以这样做:
promises.setPreferrredService.done(callback);
那么 returning deferred.promise()
或仅 return deferred
有什么区别?
您不应公开 deferred
,而应仅公开 只读 promise
。
deferred
是控制动作完成的机制,而 promise
只是一种查看结果的方式。您不希望外部方法能够完成 或拒绝 操作。
承诺不会公开允许解析它的接口。您只能等待结果并对其进行操作。
延期不仅仅是一个承诺 - 它还允许您解决或拒绝它。
So what's the difference of returning
deferred.promise()
or only returndeferred
?
您想 return deferred.promise()
以便调用代码无法调用 resolve
或 reject
或其他特定于 Deferred 的方法。这不是调用者应该有权访问的内容。它应该只能消费 promise,而不会影响它的状态。
如果您 return 实际 deferred
,那么调用者可以通过调用 deferred.resolve()
resolve
它。您想要 return promise 以便调用者可以链接它等,但实际上并不决定其解决方案。