对 promise 对象的混淆

Confusion on promise objects

我已经阅读了有关 promise 对象的内容,并且实际上已经在 promise 对象上工作过,但我仍然必须说我对基础知识还不清楚。

$http.get('/someURL').then(function(response) {
// do something
}, function(error) {
});

人们说 .then returns 一个 promise 对象。在上面的例子中 $http.get() returns 一个 promise 对象。那么这条线是什么意思呢?意思是promise.promise?? ($http.get() 返回的承诺对象.then 返回的点承诺)?

谁能解释一下?

$http.get()return是一个承诺。然后,您可以根据该承诺调用 .then().then() return这是您实际上并未在代码中使用的另一个承诺。

例如,您可以这样做:

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() 处理程序 return 都是另一个承诺,因此您可以根据需要多次链接。一个特别有用的功能是,如果您 return 来自 .then() 处理程序回调的承诺,那么 .then() 处理程序已经 return 的承诺将继承您的承诺 return 来自这样的回调:

$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
});

承诺的一个很酷的特性是它们可以链接在一起。 $http.get() returns 一个你调用 then on 的承诺。那 then 也是 returns 一个承诺,并允许你在另一个 then 语句中做额外的事情。例如:

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 函数成功或出错后执行一个过程,这会非常方便。