@kr_ilya

Почему node.js пропускает функцию?

Этот код возвращает нужную информацию в браузер, но работает долго - 2-4 секунды.
var rp = require('request-promise');
var i = '91.105.236.7';

app.get('/', function(req, res){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
var options = {
    uri: 'http://api.ipapi.com/' + i,
    qs: {
        access_key: '98eeeb1c1233456743840f9195d' // -> uri + '?access_token=xxxxx%20xxxxx'
    }
};
 
rp(options)
    .then(function (repos) {
    	console.log(repos);
    	res.send(repos);
    })
    .catch(function (err) {
        // API call failed...
    });
});


А такой код возвращает пустоту в браузер, но через некоторое время в консоль выводится нужный ответ. В браузер ответ приходит быстро, обычно меньше чем за секунду.
var rp = require('request-promise');
var i = '91.105.236.7';
var geo = geoIP(i);

app.get('/', function(req, res){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

  res.send(geo);
});
function geoIP(i){
var options = {
    uri: 'http://api.ipapi.com/' + i,
    qs: {
        access_key: '98eeeb1c73191023211233121233840f9195d' // -> uri + '?access_token=xxxxx%20xxxxx'
    }
};
 
rp(options)
    .then(function (repos) {
    	console.log(repos);
        return repos
    })
    .catch(function (err) {
        // API call failed...
    });
}


Код с таким вызовом функции тоже работает некорректно:
app.get('/', function(req, res){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
var geo = geoIP(i);
  res.send(geo);
});

Подозреваю, что функция просто не успевает обработаться, т.к идет обращение к api стороннего сайта. Это связано с механикой работы node.js? (новичок в node.js)
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
так у вас функция geoIP ничего не возвращает, а вывод в консоль вообще не зависит от запроса
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы