Страницы

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

пятница, 7 июня 2019 г.

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

Всем привет! Подскажите, пожалуйста, общий метод работы в следующем случае (и из той же категории): Предположим, есть набор id объектов, хранящихся в локальной БД мобильного приложения. var ids = [1, 3, 5]. Получать объект по его id я могу простым запросом к БД из транзакции: for (var i in ids) transaction.executeSql( 'SELECT * FROM table WHERE id = '+i, [], self.querySuccess, self.errorCB ); И вот мне в коллбэк приходят вытащенные объекты, мне надо их все сохранить в какой-нибудь массив, и когда я получу все желаемые объекты, что-то с этим массивом сделать. Например, на сервер пульнуть. Как я делаю: перед началом цикла запоминаю сколько объектов я должен получить из БД, в коллбэке веду счетчик пришедших объектов, и таким образом узнаю, когда я получил все объекты. Вопрос: нормально ли это, или велосипед? Может есть другие методы для решения подобных задач?


Ответ

Посмотрите в сторону библиотеки 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 будет окончательный результат } );

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

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