谁能解释在angularjs中使用$q服务?

前端之家收集整理的这篇文章主要介绍了谁能解释在angularjs中使用$q服务?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > AngularJS Promises,$q,defer2个
我是angularjs.的新手.我在restful api调用中看到$q来检查诺言.
$q.defer()用于保留promise对象.
我读到了许诺,但我没有得到任何东西.
虽然我可以在没有$q的情况下进行api调用,但它会在文章的某个地方使用.

所以我想知道$q的确切用法以及在没有$q的情况下进行api调用的差异.

请帮助.
谢谢

我认为我写的关于$q的文章可能对你有帮助.

$q简介

$q是一个角度定义服务.它与新的Promise()相同.但是,$q通过增强开发人员可以用来更简单地执行复杂任务的附加功能,将事情提升到了一个新的水平.

这是使用$q创建承诺的示例

angular.module("app",[])
.controller("ctrl",function($scope,$q){
  var work = "resolve";
  var promise = $q(function(resolve,reject) {
    if (work === "resolve") {
        resolve('response 1!');
    } else {
        reject('Oops... something went wrong');
    }
  }); 
  promise.then(function(data) {
    alert(data)  

  }) 
})

$q.defer()

$q.defer()返回promise构造函数的实例.创建延迟对象后,可以从该对象访问以下方法属性

resolve(value) – 使用值解析派生的promise.如果该值是通过$q.reject构造的拒绝,则承诺将被拒绝.

拒绝(理由) – 用理由拒绝派生的承诺.这相当于通过$q.reject构造的拒绝来解决它.

notify(value) – 提供有关promise执行状态的更新.在承诺被解决或拒绝之前,可以多次调用方法.

promise – {Promise} – 与此延迟相关联的promise对象

查看示例

angular.module("app",$q){
  var work = "resolve";

  function getData(){
    var obj = $q.defer();

    if (work === "resolve") {
        obj.resolve('response 1!');
    } else {
        obj.reject('Oops... something went wrong');
    }

    return obj.promise;
  } 
  getData().then(function(data) {
    alert(data)  

  }) 
})

$q.all()

如果用户需要一次发送多个请求,则用户可以使用$q.all()服务.

$q.all([$http.get('data1.json'),$http.get('data2.json')])
      .then(function(response){
        console.log(response[0].data) // data1.json response 
        console.log(response[1].data) // data1.json response 
 })

在这里,有两个http请求同时发送到两个单独的json文件获取数据.响应来自数组和响应顺序与http请求顺序相同.

$q.race()

$q.race()与$q.all()非常相似.但是,它不会发送每个请求的响应,而只返回一个请求响应.具体来说,只返回已执行的第一个请求的响应.这并不意味着它不会发送其他请求.所有请求都在发送,但它只返回执行的第一个请求的响应.

$q.race([$http.get('data1.json'),$http.get('data2.json')])
      .then(function(response){
        console.log(response[0].data) // return one response 
 })

在这里,响应可以是data1.Json或data2.json.这是使用这种方法的垮台.由于它返回第一个执行请求的响应,无法确定哪个请求响应将由promise解决.此方法对于您不希望看到所有请求的响应的批量请求很有用

结论

使用$q构造来自非承诺对象/回调的承诺,并使用$q.all()和$q.race()来处理现有的承诺.

猜你在找的Angularjs相关文章