Angularjs $ http.get和$ http.post之间的延迟不一致

时间:2017-01-05 07:08:28

标签: angularjs promise angularjs-http

这是我的一个控制器的代码的一部分。

//service call to add record to database
//bookApi has addBook method which contains a $http.post inside

bookApi.addBook(book);

//service call to show list of all books
//bookApi has a getBooks method which contains $http.get call

bookApi.getBooks().then(function(response){
            $scope.booklist = response.data;
    },function(data,status,config,headers) {
        alert('some error occured');
    }); 

当页面中显示booklist时,有时getBooks调用首先在addBook之前完成,因为它们都是异步的。因此,在页面中,当在添加书页中提交书籍时,显示的下一页是书籍列表页面,有时首先不包含新添加的书籍(您需要刷新)。

如何避免这种情况?

1 个答案:

答案 0 :(得分:3)

将承诺链接在一起,如下所示:

bookApi.addBook(book).then(function() {
    return booksApi.getBooks();
}).then(function(response) {
    $scope.booklist = response.data;
}, function(data,status,config,headers) {
    alert('some error occured');
});

为了对抗回调地狱,请在回调中返回getBooks。通常,良好的承诺方法表明你不应该在另一个then内链then,而是返回承诺并继续链接。