Я пытаюсь создать функцию, которая возвращает объект JSON из URL-адреса. Он должен работать следующим образом:
function getObject(url) {
// return undefined when the url or json is invalid
return object;
}
Чтобы я мог использовать его таким образом, если бы я использовал следующий URL-адрес:
var object = getObject('http://ip.jsontest.com/');
console.log('My IP is: ' + object.ip)
JSON из примера выглядит следующим образом:
{"ip": "127.0.0.1"}
Поэтому приведенный выше код должен зарегистрировать это:
Мой IP-адрес: 127.0.0.1
Я уже пробовал его с модулем запроса и нашел этот пример в StackOverflow:
request.get({
url: 'http://ip.jsontest.com/',
json: true,
headers: {'User-Agent': 'request'} }, (err, res, data) => {
if (err) {
console.log('Error:', err)
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode)
} else {
// data is already parsed as JSON:
console.log(data)
}
})
Данные отображаются на консоли, как и должно быть, но я не нашел способа использовать его, как в приведенном выше примере. Есть ли способ решить это без обратных вызовов? Я читал, что запросы являются асинхронными, но мне нужно решение для синхронизации.
Нет никакого способа сделать это синхронно. Вы можете изучить использование api apetch и функцию async, если они поддерживаются в вашей среде.
Например:
async function getMyIpAndDoSomething() {
const response = await fetch("http://ip.jsontest.com/");
const object = await response.json();
console.log(object.ip);
}