Я использую большую библиотеку Q для обещаний с помощью IndexedDB, поддерживаемых в приложении Chrome. Проблема заключается в том, что Q.allSettled вызывается до завершения всех методов в цепочке обещаний.Использование Q.allSettled для цепочки обещаний внутри цикла
У меня есть две таблицы:
- search_queries таблицу, которая имеет список поисковых запросов и
- A чириканье таблицу, которая имеет список твитов.
-поиск всех search_queries авто запускается так:
var promises = [];
var sq_count = 0;
search_queries.foreach(function (val, index, array) {
// 1. Search Twitter Asynchronously
// 2. Then Add them to a tweets table
// 3. Then update a search queries table
promises.push(
// Call Twitter API
search_twitter(Q, val)
.then(function(tweets) {
// Add Tweets to tweets table
return (add_tweets(Q, tweets, val));
})
// Update number of tweets in search_queries table
.then(function(search_query){
// Update counts for search_search query and store it
return update_search_query_after_search(search_query);
})
.then(function(v){
console.log("Chain is completed");
)); // Close promise chain
sq_count ++;
if(sq_count == search_query_list.length) {
Q.allSettled(promises)
.then(function(result) {
console.log("All Promises Settled);
});
}); // Close foreach loop
Количество твитов в таблице чириканье не совпадает с количеством твитов, которые находятся в таблице SEARCH_QUERY после запуска update_search_query_after_search.
Большое спасибо Яро. Я думал, что Q.allSettled стреляет, прежде чем все цепочки будут завершены, но я думаю, похоже, что это менее вероятно, чем ошибка кода. – user2738707