私のコントローラの1つのコードの一部です。
//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');
});
ブックリストがページに表示されたとき、彼らは両方とも非同期であるため、何が起こるかというと、時々はgetBooksは最初addBook前に終了を呼び出しています。ページのSOをクリックすると、書籍が[ブックを追加]ページで送信されると、次に表示されるページには、新しく追加された書籍が最初に表示されない書籍ページのリストが表示されます(更新する必要があります)。
これをどのように回避できますか?コールバック地獄に対抗するために
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
を返す。そうのような平坦な方法で一緒に約束は
getコールをポストに連鎖させる必要があります。そうしないと、両方とも非同期で非同期として扱われます。 –
'getBooks'は連鎖を使って' bookApi.addBook(book) '呼び出しの完了後に呼び出されるべきです。 –