【问题标题】:How to get promise of $http API call如何获得 $http API 调用的承诺
【发布时间】:2016-02-28 22:09:13
【问题描述】:

我想在不编写任何服务的情况下获得异步调用的promise。 我已经编写了 一些 API 来使用 JavaScript 从后端获取数据,但是以下代码不是在任何 服务 中编写的。我想在另一个 JavaScript 文件中访问以下承诺。如何访问不同文件中的承诺?

  var cust_Promise = $q.defer() ;    
  var apt_data={some data};
  $http.post(api,apt_data) 
    .success(function (response,status) {      
        cust_Promise.resolve('Success');
        return cust_Promise.promise ;              
    }) ;

【问题讨论】:

    标签: javascript angularjs promise angular-promise


    【解决方案1】:

    $http 服务返回承诺。

    只需保存返回的承诺。

    var apt_data = {some data};
    
    var promise = $http.post(url, apt_data);
    

    这意味着 AngularJS 框架支持将它们传递给其他函数,将它们作为值从其他函数返回,并将它们分配给变量或将它们存储在数据结构中。

    可以使用标准的.then.catch 方法检索已完成的结果或拒绝的错误信息。

    var derivedPromise = promise.then (function onfullFilled(response) {
        $scope.data = results.data;
        //return for chaining
        return response;
    }).catch ( function onRejected(response) {
        console.log(response.statusText);
        //throw to chain rejection
        throw response;
    });
    

    因为调用promise 的.then 方法会返回一个新的派生promise,所以很容易创建一个promise 链。可以创建任意长度的链,并且由于可以使用另一个 Promise 来解决一个 Promise(这将进一步推迟其解决方案),因此可以在链中的任何点暂停/推迟对 Promise 的解决。这使得实现强大的 API 成为可能。1

    来自文档:

    $http API 基于$q 服务公开的deferred/promise APIs。虽然对于简单的使用模式,这并不重要,但对于高级用法,熟悉这些 API 及其提供的保证非常重要。

    一般用法:2

    $http 服务是一个函数,它接受单个参数 - configuration object - 用于生成 HTTP 请求并返回 promise .

    响应对象具有以下属性:

    • data – {string|Object} – 使用转换函数转换的响应正文。
    • status – {number} – 响应的 HTTP 状态代码。
    • headers – {function([headerName])} – Header getter 函数。
    • config – {Object} – 用于生成请求的配置对象。
    • statusText – {string} – 响应的 HTTP 状态文本。

    200 到 299 之间的响应状态代码被视为成功状态,将导致调用成功回调。请注意,如果响应是重定向,则 XMLHttpRequest 将透明地跟随它,这意味着不会为此类响应调用错误回调。

    其他资源

    【讨论】:

      猜你喜欢
      • 2014-12-02
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2017-11-29
      • 2018-10-16
      • 1970-01-01
      相关资源
      最近更新 更多