我已经读过关于promise对象的事实,并且事实上已经开发了promise对象,但我仍然必须说我对基础知识并不清楚。
$http.get('/someURL').then(function(response) {
// do something
}, function(error) {
});
人们说。然后返回一个promise对象。在上面的示例中,$ http.get()返回一个promise对象。那么这条线是什么意思呢?这是不是意味着prom.promise? (由.then返回的$ http.get()点承诺返回的promise对象?)
有人可以澄清一下吗?
答案 0 :(得分:4)
$http.get()
返回一个承诺。然后,您可以就该承诺致电.then()
。 .then()
还会再次承诺您未在代码中使用。
例如,你可以这样做:
var p = $http.get('/someURL').then(function(response) {
// do something
}, function(error) {
// do something on error
});
// p is a promise
p.then(function() {
// more code here that runs after the previous code
});
或者,你可以这样做:
$http.get('/someURL').then(function(response) {
// do something
}, function(error) {
// do something on error
}).then(function() {
// more code here
});
因此,每个.then()
处理程序返回另一个承诺,因此您可以根据需要链接多次。一个特别有用的特性是,如果从.then()
处理程序回调中返回一个promise,那么.then()
处理程序已经返回的承诺将继承你从回调中返回的那个承诺:
$http.get('/someURL').then(function(response) {
return $http.get('/someOtherURL');
}, function(error) {
// do something on error
}).then(function(secondResponse) {
// will get here when both http.get operations are done
});
答案 1 :(得分:2)
承诺的一个很酷的特点是它们可以链接在一起。 $ http.get()返回一个你已经调用了then的promise。然后,它也会返回一个承诺,并允许您在另一个声明中执行其他操作。例如:
function myGet() {
return $http.get('myRoute').then(
function(res) {
//do something
return res;
}, function(err) {
return $q.reject(err);
});
}
myGet().then(
function(res) {
//Do something else
}, function(err) {
//Handle Error
});
如果你想在myGet函数成功或出错之后让程序发生,这非常方便。