【问题标题】:Angular.js promise [duplicate]Angular.js 承诺 [重复]
【发布时间】:2015-08-06 23:40:50
【问题描述】:

我对承诺感到困惑。我找到了下面的代码。承诺在这里有什么好处。我读过关于它用于避免回调地狱的承诺。 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;
        };

【问题讨论】:

  • 因为标题太模糊了,我选择了许多关于 Promises 的问题之一来复制它。 google.com/…

标签: javascript angularjs callback angular-promise


【解决方案1】:

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

文档说:

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

另请阅读:

$http

$q

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 2022-12-05
      • 1970-01-01
      • 2018-03-19
      • 2019-02-04
      • 1970-01-01
      • 2015-11-04
      • 2016-03-09
      相关资源
      最近更新 更多