Javascript 这是一种常见的模式吗?(返回数据而不是返回承诺)

Javascript 这是一种常见的模式吗?(返回数据而不是返回承诺),javascript,angularjs,ajax,promise,angularjs-service,Javascript,Angularjs,Ajax,Promise,Angularjs Service,我在《卑鄙机器》一书中遇到了这种模式 直到现在,我还以为你总是从服务(向控制器)返回承诺,然后在控制器中处理.success或 在这里,作者将从promise返回返回的数据 这是常见的吗?这是推荐的做法吗 .factory('Auth', function($http, $q, AuthToken) { var authFactory = {}; authFactory.login = function(username, password) {

我在《卑鄙机器》一书中遇到了这种模式

直到现在,我还以为你总是从服务(向控制器)返回承诺,然后在控制器中处理
.success

在这里,作者将从promise返回返回的数据

这是常见的吗?这是推荐的做法吗

  .factory('Auth', function($http, $q, AuthToken) {

        var authFactory = {};

        authFactory.login = function(username, password) {
            return
                $http
                    .post('/api/authenticate', {
                        username: username,
                        password: password
                    })
                    .success(function(data) {
                        AuthToken.setToken(data.token);
                        return data;
                    });
        };
        ...

是的,我会推荐这样的解决方案,并认为这是一个很好的做法。在@scniro响应中,您还需要专门处理错误响应,这增加了复杂性。您的解决方案更简洁、更简短、更易于阅读。我在这里找到了一篇关于它的好文章

success
返回什么?一个令牌-一个大的长字符串no,这就是调用
中的函数success
.success
本身返回原始承诺(从
.post
返回的承诺)。啊-因此控制器(我还没有看到)可能会链接类似“.finally”的东西,直到该承诺的结尾。。。我忘记了链接…没有理由不能处理服务中承诺的返回值,特别是如果它不是需要放在控制器中的
$scope
上的东西。顺便说一句,是的,所以您应该使用
promise()。然后(函数successCallback(){},函数errorCallback(){})模式。