当前位置: 首页 > 面试题库 >

谁能解释一下angularjs中$ q服务的用法?

云浩然
2023-03-14
问题内容

我是新手angularjs。我$q在宁静的api调用中看到了检查诺言的信息。
$q.defer()被用来保留promise对象。我读了诺言,但一无所获。尽管我可以不带api进行api调用$q,但是在文章中的某处使用了它。

所以我想知道在$q没有的情况下进行api调用的确切用法和区别$q

请帮助。谢谢


问题答案:

我认为我写的有关$ q的文章可能会对您有所帮助。

$ q简介

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

这是使用$ 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)–用价值解决派生的诺言。如果该值是通过$ q.reject构建的拒绝,则将拒绝该promise。

reject(reason)–拒绝产生的承诺并提供理由。这等效于通过$ q.reject构造的拒绝来解决它。

notify(value)-提供有关承诺执行状态的更新。在兑现承诺之前,可能会多次调用此命令。

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

看例子

angular.module("app",[])
.controller("ctrl",function($scope,$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 中的Promise --- $q服务详解,包括了AngularJS 中的Promise --- $q服务详解的使用技巧和注意事项,需要的朋友参考一下 先说说什么是Promise,什么是$q吧。Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered。 什么是Promise 以前了解过Ajax的都能体

  • 我对javascript还是个新手,只知道基本知识。有人能解释一下下面的代码,就像在调用init函数时发生的流中一样吗? 我对下面代码的理解是,一旦调用init函数,就会设置一个全局变量输出,该输出映射到一个带有id输出的HTML元素。然后调用。这将创建一个WebSocket对象。这之后是我不完全理解的部分。 在行中,WebSocket对象有一个名为open的属性,我们将它设置为任何返回的属性 。

  • 我在计算这条线的时间复杂度时遇到了麻烦。在我看来是二次O(n**2)。因为如果不使用列表理解,这里必须经过嵌套循环。

  • 这是我从骡子3到骡子4转换的第一个项目。我与mule4一起工作,但在Mule3是新的。有谁能帮帮我吗?你能告诉我这些自定义处理器和变压器在这个mule3代码中的用途吗?而Mule4中的等价代码会是什么呢?在骡子4中没有像这样的自定义变压器。请帮帮我..

  • 问题内容: 我无法理解网页的的文档中。 谁能简单地向我解释一下? 问题答案: 背后的想法是它将转换您的数据,使其分布的平均值为0,标准差为1。 对于多变量数据,这是按功能进行的(换句话说,独立于数据的每一列) 。 给定数据的分布,数据集中的每个值都将减去平均值,然后除以整个数据集(或多变量情况下的特征)的标准差。

  • 问题内容: 我的服务是: 我通过以下方式在我的文件中调用它: 但是,它抱怨这不是一个功能。我不退还已解决的承诺吗? 问题答案: 从您的服务方式: 在您的控制器中: