这是我的一个控制器的代码的一部分。
//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之前完成,因为它们都是异步的。因此,在页面中,当在添加书页中提交书籍时,显示的下一页是书籍列表页面,有时首先不包含新添加的书籍(您需要刷新)。
如何避免这种情况?
答案 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
,而是返回承诺并继续链接。