【问题标题】:How does Angular $q.when work?Angular $q.when 如何工作?
【发布时间】:2013-05-27 10:07:51
【问题描述】:

有人可以解释一下$q.when 在 AngularJS 中是如何工作的吗? 我正在尝试分析 $http 的工作原理并发现:

var promise = $q.when(config);

这是来自 Chrome 控制台的配置对象:

Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…}
cache: Object
headers: Object
method: "GET"
transformRequest: Array[1]
transformResponse: Array[1]
url: "/schedule/month_index.html"
__proto__: Object

接下来会发生什么?如何解决或拒绝此对象?

【问题讨论】:

  • $q 实现了承诺模式,它只是 javascript 中回调的简单包装。所以当回调成功触发时,承诺得到解决
  • @Ajaybeniwal,但在这种情况下对象传递,而不是回调。如果对象通过而不是回调,它如何解决/拒绝?

标签: angularjs deferred q


【解决方案1】:

调用$q.when 接受一个promise 或任何其他类型,如果它不是一个promise,那么它将把它包装在一个promise 中并调用resolve。如果你向它传递一个值,那么它永远不会被拒绝。

来自the docs

将可能是值或(第 3 方)then-able 承诺的对象包装到 $q 承诺中。当您处理的对象可能是也可能不是 Promise 时,或者当 Promise 来自不可信的来源时,这很有用。

【讨论】:

  • If you pass a value to it - 但是如果我传递对象怎么办?
  • 值、对象、数组都一样。
  • 如果我传递一个返回承诺的函数怎么办?是否意味着它的 then 回调将通过 resolve 发送的 promise 结果参数传递?
  • Onur,当你说传递一个函数时,你的意思是作为一个函数对象:$q.when(myfunc),还是通过调用你传入的函数:$q.when(myfunc())?我不知道前者会做什么...后者会先调用myfunc(),并将返回的promise|value传递给.when()
猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 2013-09-07
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 2017-01-10
相关资源
最近更新 更多