angularjs中.then和deferObj.resolve()之间的关系

时间:2016-09-25 15:58:55

标签: javascript angularjs angular-promise

我发现很难理解angularjs中的一些承诺概念。我理解它是什么以及何时使用它并且$ q.defer创建一个promise对象,其中包含resolve(),reject()等方法我知道有功能但我无法理解的是何时使用它。然后功能在某些情况下我们使用它,在某些情况下我们不会。

link1 link2 link3

我经历了很多像上面这样的链接,但仍然没有得到,也许我理解这一切都是错的。但是有人请解释何时将.resolve方法放入.then函数中,或者如果我的理解是完全错误的,请在downvoting之前纠正我,因为在此之前发布问题之前我确实试着自己理解它。

2 个答案:

答案 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}}方法调用相应。

来自official documentation

  

$ http服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回一个promise。

再一次,承诺是什么?检查此答案的开头。已经编写了reject()服务方法的代码。当调用任何此方法并完成后,他们会调用$httpresolve()。开发人员必须相应地编写代码来阅读此结果。 (是的,这是我们在评论中谈到的reject();)。

答案 1 :(得分:0)

  

请解释何时将.resolve方法放入.then函数

Absolutely never

如果您参考your second link中的示例,那只是一个反模式,不应该使用。