我发现很难理解angularjs中的一些承诺概念。我理解它是什么以及何时使用它并且$ q.defer创建一个promise对象,其中包含resolve(),reject()等方法我知道有功能但我无法理解的是何时使用它。然后功能在某些情况下我们使用它,在某些情况下我们不会。
我经历了很多像上面这样的链接,但仍然没有得到,也许我理解这一切都是错的。但是有人请解释何时将.resolve方法放入.then函数中,或者如果我的理解是完全错误的,请在downvoting之前纠正我,因为在此之前发布问题之前我确实试着自己理解它。
答案 0 :(得分:0)
Promise是一个可以传递或返回的对象,它保存对异步行为结果的引用。在Angular中,它们是通过$q service创建的。
$q.defer()
创建一个具有特殊方法的对象,然后是resolve()
和reject()
。 resolve()
方法表示执行成功完成并包装承诺的数据以便稍后返回。如果出现问题,应调用reject()
方法,发送错误对象或错误消息。
此函数应具有调用者,此调用者应捕获对promise对象的引用。
这里可以调用then()
方法来获取结果或根据具体情况处理错误。请注意,then()
方法需要2个参数,这些参数是成功时执行的函数,或者是出错的。
在link3中,您可以看到代码的一部分具有名为getData
的异步函数的定义,稍后调用then()
来获取结果,此调用是由异步函数getData
的调用者创建。
在link2控制器 FatherCtrl 是调用then()
来处理服务 SonService 的响应的人。在 SonService 中调用then()
方法可能会造成混淆,但这是为了获取HTTP GET调用的结果,因为注释正确解释了它: / p>
// the $http API is based on the deferred/promise APIs exposed by the $q service
// so it returns a promise for us by default
在此示例中,您只看到then()
部分,因为get()
服务的$http
方法是一个异步函数,在完成后会生成resolve()
或{{ 1}}方法调用相应。
$ http服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回一个promise。
再一次,承诺是什么?检查此答案的开头。已经编写了reject()
服务方法的代码。当调用任何此方法并完成后,他们会调用$http
或resolve()
。开发人员必须相应地编写代码来阅读此结果。 (是的,这是我们在评论中谈到的reject()
;)。
答案 1 :(得分:0)