【发布时间】:2017-10-20 05:19:28
【问题描述】:
我开始学习 Javascript 中的 Promise,但我仍然没有完全理解它。下面的代码大部分是真实的代码。我已经放置了几个调试器语句,所以程序停止,我可以理解流程是如何工作的并检查一些变量。我已经阅读了一些关于承诺的博客文章,但我仍然无法理解所有内容。这是来自使用 AngularJS 和 q 库的应用程序。
几个问题:
1- deferred.Resolve() 究竟做了什么? response.data 有什么作用?当我检查 'deferred' 对象及其 'promise' 对象时,我看不到 response.data 的任何踪迹。
2- 当我在调试器 #1 之后恢复执行时,我认为 http post 语句会运行,但执行跳转到了 return 语句。我猜这就是promise 跳入的地方,并且该帖子将来会发生?
3- 当函数返回时,我如何知道帖子何时发布?调用者将获得返回承诺,调用者期望如何处理它?
this.GetData = function()
{
var data = blahblah;
var deferred = this.$q.defer();
debugger; //1
this.$http.post(someurl, data,
{
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
handleErrors: false
})
.then(function(response) {
debugger; //2
(domesomething...)
deferred.resolve(response.data);
},
function(error) {
(logerror...)
deferred.reject(error);
});
debugger; //3
return deferred.promise;
};
【问题讨论】:
-
调试异步代码并不简单。此外,随机缩进使调试更加困难
-
另外,你正在创建一个
deferred- 但你的this.$http.post无论如何都会返回一个承诺 - 避免延迟反模式
标签: javascript promise q