在jQuery中返回promise()或deferred有什么区别
What is the difference of returning a promise() or a deferred in jQuery?
假设我有一个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()
,这样调用代码就不能调用resolve
或reject
或其他Deferred特定的方法。这不是调用者应该访问的东西。它应该只能消费promise,而不能影响其状态。
您不应该公开deferred
,而应该只公开只读promise
。
deferred
是控制动作完成的机制,但promise
只是看到结果的一种方式。您不希望外部方法能够完成或拒绝操作。
promise不会公开允许解析它的接口。您只能等待结果并对其进行操作。
延期不仅仅是一个承诺,它还允许您解决或拒绝它。
如果返回实际的deferred
,那么调用者可以通过调用deferred.resolve()
来resolve
。您希望返回promise,以便调用者可以将其链接起来,等等,但实际上并没有决定其解决方案。
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- javascript导入的最佳实践是什么
- 在jQuery中返回promise()或deferred有什么区别
- 对于jquery Deferred函数,有什么替代方法吗
- 什么是ES6承诺相当于jQuery Deferred's 'always ' ?
- jQuery中deferred对象中的resolved和rejected是什么意思?