Javascript 异步函数调用后从工厂返回角度$resource

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

异步函数调用后,从工厂返回角度$resource

下面显示了一个角度工厂的示例,我试图在其中返回$resource

我试图在返回$resource之前使用另一个服务进行异步函数调用,以接收web服务路径

这可能吗

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;
    });