Angular.js承诺

时间:2015-05-25 13:11:27

标签: javascript angularjs callback angular-promise

我对承诺感到困惑。我找到了下面的代码。这里承诺的好处是什么?我已经读过有关承诺避免回调地狱的承诺。 promise是否提供更好的性能,还是仅用于以可读格式编写代码?

     var list = function (params) {
            if (!params) {
                params = {};
            }
            var deferred = $q.defer();
            if (params.q) {
                params.q = JSON.stringify(params.q);
            }

            $http.get(someurl, {params: params}).success(function  (data, status, headers) {
                deferred.resolve(data);
            }).error(function (data, status, headers) {
                    deferred.reject(data);
                });
            return deferred.promise;
        };

2 个答案:

答案 0 :(得分:0)

Promise用作异步代码的句柄。您可以稍后使用它(作为变量名称)来检查成功。

文档说:

  

一种服务,可以帮助您异步运行函数,并在完成处理时使用它们的返回值(或异常)。

同时阅读:

$http

$q

答案 1 :(得分:0)

Promise用于使代码更具可读性,更有条理(避免意大利面条代码),并且更加灵活。

然而,你在那个例子中使用了一种称为“deferred antipattern”的错误技术。完成同样事情的更好方法是:

var list = function (params) {
    if (!params) {
        params = {};
    }
    if (params.q) {
        params.q = JSON.stringify(params.q);
    }

    return $http.get(someurl, {params: params}).then(function (result) {
        return result.data;
    });
};