在异步函数调用后从工厂返回一个角度$资源。
下面显示了一个角度工厂的示例,我正在尝试返回$资源。
我正在尝试使用其他服务进行异步函数调用,以便在返回$ resource之前接收Web服务路径。
这可能吗?
angular.module('app').factory('newService', function($resource, configService) {
configService.get(function(config) {
return $resource(config.webServicePath + '/api/names', {},
{ 'update': { method:'PUT' } }
);
});
});
在异步函数调用之后,任何人都有一个服务,提供者或工厂返回资源的示例,以接收上述信息。
如果您可以提供控制器中使用的newService的示例,也会有所帮助。
提前感谢您的帮助。
答案 0 :(得分:3)
目前,这是回复resource
的回调,这对你没有多大帮助。在异步函数完成之前,您不能延迟return语句,但是您可以使用$q promise。
ngular.module('app').factory('newService', function($resource, configService, $q) {
var resourcePromise = $q.defer();
configService.get(function(config) {
resourcePromise.resolve($resource(config.webServicePath + '/api/names', {},
{ 'update': { method:'PUT' } }
));
});
return resourcePromise.promise;
});
以下是$q
的工作原理
$q.defer()
.resolve
。.reject
。deferredobject.promise
,这是一个承诺对象。使用返回承诺的服务
当您期望来自promise的值时,您可以通过将回调传递给其then
方法来监听它。如果承诺可能被拒绝(操作失败),那么传递第二个回调是个好主意,当拒绝承诺时将调用该回调。
这是一个返回承诺的服务的简单示例,以及如何使用它: