javascript - AngularJS中Promise的.then和deferObj.resolve()之间的关系

标签 javascript angularjs angular-promise

我发现很难理解 AngularJS 中 Promise 的一些概念。我了解它是什么以及何时使用它,并且 $q.defer 创建了一个 Promise 对象,该对象具有解析()、reject() 等方法,我知道有这些功能,但我无法理解的是何时将它与 . then function 在某些情况下我们使用它,在某些情况下我们不使用它。

link1 link2 link3

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

最佳答案

Promise 是一个可以传递或返回的对象,并保存对异步行为结果的引用。在 Angular 中,它们是通过 $q service 创建的.

$q.defer() 创建一个具有特殊方法的对象,其中包括 resolve()reject()resolve() 方法指示执行成功完成,并包装数据以供稍后返回的 Promise。如果出现问题,则应调用 reject() 方法,发送错误对象或错误消息。

这个函数应该有一个调用者,并且这个调用者应该捕获对promise对象的引用。

这里可以根据情况调用then()方法来获取结果或处理错误。请注意,then() 方法采用 2 个参数,这些参数是在成功或出错时将执行的函数。

link3您可以看到代码的一部分定义了名为 getData 的异步函数,随后调用了 then() 来获取结果,此调用已完成由异步函数 getData 的调用者调用。

link2 Controller FatherCtrl 是调用 then() 来处理服务 SonService 响应的 Controller 。可能令人困惑的是,SonService中还调用了then()方法,但这是为了获取HTTP GET调用的结果,如注释所示正确解释它:

// 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() 部分,因为 $http 服务的 get() 方法是一个异步函数完成后将相应地调用 resolve()reject() 方法。

来自official documentation :

The $http service is a function which takes a single argument — a configuration object — that is used to generate an HTTP request and returns a promise.

再说一遍,什么是 promise ?检查这个答案的开头。 $http 服务的方法代码已经编写完毕。当调用任何此类方法时,它们完成时会调用 resolve()reject()。开发人员必须相应地编写代码才能读取此结果。 (是的,这就是我们在评论中讨论的 then() ;))。

关于javascript - AngularJS中Promise的.then和deferObj.resolve()之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688892/

相关文章:

angularjs - 第一页加载时未在 ng 网格中选择页面大小

带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析

javascript - 在同一函数中解决 promise 后返回 promise

javascript - $q.all 在服务中返回 Controller 中的空对象

javascript - 根据分辨率调整图像大小

php - 外部文件中的 Javascript

JavaScript JSON 字符串化 : make it output a one-line compact string

javascript - 变化的输出标准值?

javascript - 从子指令调用指令函数不起作用

angularjs - 布局对齐 ="center"不工作 Angular