【发布时间】:2015-09-10 02:55:40
【问题描述】:
我已经阅读了关于 $q 的每篇文章,但不知何故我无法理解它。例如,以我找到的最好的article 为例。我知道:
var myFirstDeferred = $q.defer(); //Actually I don't even get this far
延迟表示异步操作的结果。它公开了一个接口,该接口可用于指示状态和它所表示的操作的结果。它还提供了一种获取相关 Promise 实例的方法。
什么是“延期”?它与承诺有何不同?然后我们得到这个:
async(function(value) {
myFirstDeferred.resolve(value);
}, function(errorReason) {
myFirstDeferred.reject(errorReason);
});
我不知道这是在做什么。我想强调我理解异步。我了解承诺结构。例如,我确切地知道下面的代码在做什么:
$http.get(url)
.then(function(result){returnresult}
,function(error){return error})
但是我们对上面对象中的 deferred 做了什么?为什么还要推迟呢?为什么不只是 then 块?
编辑:我想强调一下,我在这里经历了大量的回复,以及文章。我认为 $q 的重点是强制执行异步调用(有点像 c# 中的“等待”),然后执行一些代码。我真的不明白它是怎么做到的。在此example 中等待多个异步操作时,我确实知道 .all 命令是如何工作的,但不是一个。
编辑:此编辑是对duplicate suggestion 的回应——我不同意这个概念。一方面,这个问题更加集中且范围有限。此外,这里接受的答案比其他 q 中的广网答案更清楚(imo)。
【问题讨论】:
-
这只不过是任何其他的承诺......这只是 Angular 的一种笨拙的语法。你知道创建 Promise 的标准语法吗?
return new Promise(function(resolve, reject) { //etcAngular 让您调用该函数并使用resolve和reject而不是标准方式返回一个对象:将所有内容包装在新的 Promise 构造函数中,该构造函数接收resolve和reject作为参数。
标签: angularjs angular-promise deferred