Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Синхронная обработка асинхронно накопленных данных. Теория.

#callback #javascript #асинхронность


Всем привет! Подскажите, пожалуйста, общий метод работы в следующем случае (и из
той же категории):
Предположим, есть набор id объектов, хранящихся в локальной БД мобильного приложения. 
var ids = [1, 3, 5].

Получать объект по его id я могу простым запросом к БД из транзакции:
for (var i in ids)
    transaction.executeSql( 'SELECT * FROM table WHERE id = '+i, [], self.querySuccess,
self.errorCB );

И вот мне в коллбэк приходят вытащенные объекты, мне надо их все сохранить в какой-нибудь
массив, и когда я получу все желаемые объекты, что-то с этим массивом сделать. Например,
на сервер пульнуть.
Как я делаю: перед началом цикла запоминаю сколько объектов я должен получить из
БД, в коллбэке веду счетчик пришедших объектов, и таким образом узнаю, когда я получил
все объекты.
Вопрос: нормально ли это, или велосипед? Может есть другие методы для решения подобных
задач?    


Ответы

Ответ 1



Посмотрите в сторону библиотеки Async.js, в ней есть множество методом, с помощью которых можно решить вашу проблему, например async.map async.map( ids, function(item, callback){ transaction.executeSql( 'SELECT * FROM table WHERE id = '+item, [], function(result){ // здесь наверно получаете результат выполнения запроса, его надо передать вторым параметром в callback callback(null/*error*/, result); }); }, function(err, resгlt){ // в result будет окончательный результат } );

Комментариев нет:

Отправить комментарий