我发现很难理解 AngularJS 中 Promise 的一些概念。我了解它是什么以及何时使用它,并且 $q.defer 创建了一个 Promise 对象,该对象具有解析()、reject() 等方法,我知道有这些功能,但我无法理解的是何时将它与 . then function 在某些情况下我们使用它,在某些情况下我们不使用它。
我浏览了很多像上面这样的链接,但仍然没有得到,也许我理解错了。但是任何人请解释何时将 .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()
方法。
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/