Javascript 异步函数调用后从工厂返回角度$resource
异步函数调用后,从工厂返回角度$resource 下面显示了一个角度工厂的示例,我试图在其中返回$resource 我试图在返回$resource之前使用另一个服务进行异步函数调用,以接收web服务路径 这可能吗Javascript 异步函数调用后从工厂返回角度$resource,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,异步函数调用后,从工厂返回角度$resource 下面显示了一个角度工厂的示例,我试图在其中返回$resource 我试图在返回$resource之前使用另一个服务进行异步函数调用,以接收web服务路径 这可能吗 angular.module('app').factory('newService', function($resource, configService) { configService.get(function(config) { return $reso
angular.module('app').factory('newService', function($resource, configService) {
configService.get(function(config) {
return $resource(config.webServicePath + '/api/names', {},
{ 'update': { method:'PUT' } }
);
});
});
任何人都会有这样一个例子:服务、提供者或工厂在异步函数调用后返回资源,以接收上述信息
如果您能提供一个在控制器中使用newService的示例,这也会很有帮助
提前感谢您的帮助。目前,返回
资源的是回调,这对您帮助不大。在异步函数完成之前,不能延迟return语句,但可以使用promise
下面是$q
的工作原理
您需要返回将来得到的值,因此可以使用$q.defer()
这将返回一个延迟对象
进行异步调用,并在其成功回调中对延迟对象调用.resolve
如果回调失败,则对延迟对象调用.reject
返回delferredobject.promise
,它是一个promise对象
使用返回承诺的服务
当您期望从承诺中得到一个值时,您可以通过向其然后方法传递回调来侦听它。如果承诺可能被拒绝(操作失败),最好传递第二个回调,当承诺被拒绝时将调用第二个回调
下面是一个返回承诺的服务的简单示例,以及如何使用它:
“返回”和“异步”通常不会混合使用。你想与承诺和回访一起工作。Angular有一个名为$q
的服务,请参阅。大多数有角度的请求已经返回了承诺。
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;
});