Angular $ q。如何工作?


95

有人可以解释一下$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中的回调进行简单的包装。因此,当回调成功触发时,诺言就得到了解决
Ajay Beniwal 2013年

1
@Ajaybeniwal,但在这种情况下,对象已传递,而不是回调。在对象通过而不回调的情况下如何解决/拒绝?
SET

Answers:


113

调用$q.when采用promise或任何其他类型,如果不是promise,则将其包装在promise中并调用解决。如果您将值传递给它,那么它将永远不会被拒绝。

从文档:

将可能是值或(第三方)然后可承诺的对象包装为$ q承诺。当您处理可能是或可能不是承诺的对象时,或者如果承诺来自不可信任的来源时,这很有用。


If you pass a value to it-但是如果我通过物体呢?
2013年

11
值,对象,数组都是一样的。
Derek Ekins 2013年

3
如果我传递了一个返回承诺的函数怎么办?这是否意味着它的then回调将通过resolve发送的promise结果参数传递?
Onur Topal

3
Onur,当您说传递函数时,是指作为函数对象:$q.when(myfunc),还是通过调用函数来传递:$q.when(myfunc())?我不确切知道前者会做什么...后者会myfunc()先调用,然后将返回的promise | value传递给.when()
jrista
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.