Nodejs не предлагает синхронную сеть в любом случае. Все встроенные сети работают асинхронно. Следовательно, вы не можете напрямую возвращать значение из функции, полученной через сеть. Вместо этого вам необходимо сообщить результат либо с помощью функции обратного вызова, инициируемого вами события, либо возвращенного обещания.
Краткое описание этой проблемы см. В этом очень активном вопросе / ответе:
Как я могу вернуть ответ от асинхронного вызова?
Существует грубый хак, который включает использование синхронного дочернего процесса и его выполнение для вас, но вряд ли это то, что они спрашивали в вашем интервью.
Итак, основной ответ на вопрос заключается в том, что «nodejs не предлагает синхронную сеть», и далее «вы не можете изменить асинхронный результат в синхронный результат». Таким образом, правильный способ кодирования это использование nodejs методов асинхронного кодирования.
Самый чистый способ, которым я знаю, чтобы делать вызовы http, использует библиотеку, такую как request-promise()
или мой новый любимый got()
и используйте интерфейс обещаний плюс async/await
, чтобы создать хороший чистый путь к коду:
const got = require('got');
async function getSomeJSON(url) {
let data = await got(url).json();
console.log(data);
return data;
}
getSomeJSON(myURL).then(data => {
console.log("got my data");
}).catch(err => {
console.log(err);
});