创建一个没有返回值的AngularJS promise
Create an AngularJS promise with no return value
我使用$q
将promise封装在遗留回调中。但是,现有回调没有要返回的值。它需要一个没有参数的成功函数。
angular.module('MyModule').service('MyService', function() {
function initialize() {
var deferred = $q.defer();
LegacyFactory.initialize(
// 'void' Success Callback
function () {
deferred.resolve (/* WHAT DO I PUT HERE? */);
},
// Error Callback
function (errorCode) {
deferred.reject(errorCode);
});
return deferred.promise;
}
});
我在AngularJS文档中找不到resolve
的void
版本。我可以返回一个伪值,但客户端可能会访问该伪值,这会导致混乱。
如何创建没有返回值的AngularJS承诺?
注意:AngularJS promise返回空对象的问题完全不同。该问题确实在resolve
函数中返回了一个值。
JavaScript中没有void
数据类型。相反,JavaScript使用基元类型undefined
,用于表示尚未赋值的变量。
没有返回值的方法或语句将返回undefined
。不使用return
语句的函数将返回undefined
。未传递给函数的参数将是undefined
。
我希望您开始在这里看到undefined
的一致行为。
function foo(x) { console.log(x); }
foo(); // will print undefined
function zoom() {}
console.log(zoom()); // will print undefined
因此,当您使用deferred.resolve()
时,您将传递undefined
作为数据参数的值。
更具体地回答您的问题。
"如何创建无回报值的AngularJS承诺?"
编写JavaScript代码,使承诺不返回值。你会写这个的。
deferred.resolve(undefined);
这清楚地表明,没有预期的数据。
稍后在回调中,您不必定义数据参数,但如果您愿意,可以。
foo().then(function(data){
if(typeof data === 'undefined') {
// there is no data
} else {
// there is data
});
如果总是期望没有数据,那么就这样做。
foo().then(function(){
// handle success
});
相关文章:
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- angularjs如何从返回值中找到正确的属性
- AngularJS-工厂中promise ID字段的返回值
- AngularJS:如何获取$http结果作为函数的返回值
- Angularjs和服务器端返回值(PHP)
- AngularJS如何从异步调用返回值
- angularjs从html调用函数返回值
- 在 AngularJs 中,从工厂服务到控制器的返回值丢失
- angularjs:不能显示 JS 'typeof' 的返回值
- 在AngularJS中使用ng repeat调用和迭代函数返回值
- 创建一个没有返回值的AngularJS promise
- 从AngularJS服务检索值而不返回值
- AngularJS:如何从工厂获取返回值
- 重复一个函数调用7次,然后使用angularjs用返回值填充标签
- 如何在angularjs中检查承诺返回值并采取行动
- 如何检查angularjs服务中的返回值是一个承诺
- AngularJS 1.2.19从嵌套$resource服务返回值
- AngularJS从工厂返回值到控制器
- AngularJS从外部控制器的AJAX获取返回值