0

решил перейти с php на node.js и столкнулся с проблемой, что из функции не могу получить данные(

из главного файла вызываю метод getTickers находящийся в файле tickersRepository.

let tickerRepository = require('./repository/kucoin/tickerRepositiry');

let response = tickerRepository.getTickers();

console.log(response);

файл tickersRepository

module.exports = {

request: require('request'),

getTickers() {

    this.request('https://api.kucoin.com/v1/open/tick', function (error, 
        response, body) {
            if (response.statusCode !== 200 && body !== null)
                console.log('Bad response from server...');
            return body;
        });
    }
};

в конечном итоге выдает undefined. Пробовал выводить данные прям из метода getTicekrs - все работает. Подскажите пожалуйста как решить проблему.

  • изучить это https://ru.stackoverflow.com/q/554290/232932 затем https://www.npmjs.com/package/request

    чтобы получить дополнительные плюшки в виде автокомплита например переменной response из библиотеки request: разобраться что такое .d.ts @types посмотреть на TypeScript установить vscode. в общем велкам : )

    – qwabra Jul 31 '18 at 17:52

1 Answers1

2

getTickers - асинхронная функция, оберните в Promise:

const request = require('request');

module.exports = {
    getTickers() {
        return new Promise((resolve, reject) => {
            request('https://URL', (error, response, body) => {
                if (response.statusCode !== 200 && body !== null) {
                    reject('Bad response from server...');
                } else {
                    resolve(body);
                }
            });
        });
    }
};

Далее в другом модуле:

const tickerRepository = require('./repository/kucoin/tickerRepositiry');

tickerRepository.getTickers().then((response) => {
    console.log(response);
}).catch((e) => {
    console.log(e);
});

Или через async + await:

(async () => {
    const response = await tickerRepository.getTickers();
})();
arturovt
  • 4,738