Veneomin
@Veneomin

Как работать с асинхронным модулем?

Есть модуль, который делает запрос к базе. Вызываю его из другого места но из-за асинхронности он не успевает отработать. Как вызвать его синхронно?
function createExtraData() {
    var regionList = regionsLists.getRegionsList();
    console.log(regionList) //Тут undefined, запрос к базе в модуле еще не успел выполнится
    sendData()
}

Можно пример кода как пофиксить? Читал про промисы но не понимаю как ими тут воспользоватся.
  • Вопрос задан
  • 185 просмотров
Решения вопроса 2
@tex0
Всё через callback'и!
В параметры getRegionsList передавайте callback, в котором уже вы будете производить действия с полученными данными.
Асинхронные функции обычно ничего не возвращают (через return). Их задача вызвать callback и передать в него результат выполнения функции (в вашем случае запроса к БД).

UPD: пример (ваш модуль)
//...

module.exports.getRegionsList = function(callback)
{
    /*абстрактный пример запроса к БД*/
   db.req(callback);
/* 
Предполагается что функция req асинхронная и так же принимает callback. 
Передаете в неё параметр вашей функции. Формат вашего callback'а определяется сигнатурой callback'а в req
*/
}
Ответ написан
Комментировать
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Добавьте в модуль коллбэк
function createExtraData() {
    regionsLists.getRegionsList(function(regionList){
        console.log(regionList);
        sendData();
   });
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
Вам нужжно прийти к вот такому виду:
var regionList = regionsLists.getRegionsList().then(function(data) { console.log(data) })


Как это сделать: https://learn.javascript.ru/promise
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы