AngularJS使用$ resource服务.GET请求无法解决承诺

ses*_*ses 28 json angularjs

我们来说这样的服务:

   services.factory('User', function($resource){
        return $resource('/rest/usersettings/:username', {}, {
            get:    {method: 'GET'},
            update: {method: 'POST'}
        });
    });
Run Code Online (Sandbox Code Playgroud)

所以它应该像这样使用:

        scope.user = User.get( {username: 'bob'}  );    // GET

        console.log( JSON.stringify(scope.user) )       // {"$promise":{},"$resolved":false} 
Run Code Online (Sandbox Code Playgroud)

所以,当我发送GET请求时,它就可以了,构建这个ur + params:

http://localhost:9000/rest/usersettings/bob
Run Code Online (Sandbox Code Playgroud)

问题,为什么我有: {"$promise":{},"$resolved":false}

如果我的GET请求导致从服务器返回json-response:{"username":"bob","email":"bob@bobs.com"}那么我希望我scope.user的数据填满.

我应该以某种方式等待承诺准备/解决吗?

Kos*_*rov 60

User.get( {username: 'bob'} )不会立即返回您的实际数据.当ajax返回时,它返回一些将保存数据的东西.在那个(the $promise)上,您可以注册一个额外的回调来记录您的数据.

您可以将代码更改为:

   scope.user = User.get( {username: 'bob'}  );    // GET
   scope.user.$promise.then(function(data) {
       console.log(data);
   });
Run Code Online (Sandbox Code Playgroud)

  • 我想你在此期间没有切换Angular版本.`$ resource`有一个突破性的变化.对于1.2.x,它是`scope.user.$ promise.then()`,对于1.0.x,它是`scope.user.$ then()`. (8认同)

Ste*_*wie 12

您将在那里获取数据,但不会立即获得.阅读ngResource上文档:

重要的是要意识到调用$ resource对象方法会立即返回一个空引用(取决于isArray的对象或数组).从服务器返回数据后,将使用实际数据填充现有引用.这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现.具有空对象导致无渲染,一旦数据从服务器到达,则对象用数据填充,并且视图自动重新呈现其自身显示新数据.这意味着在大多数情况下,永远不必为动作方法编写回调函数.