#json #reactjs
#json #reactjs
Вопрос:
У меня есть несколько URL-адресов, похожих на https://zkillboard.com/api/stats/solarSystemID/31000007 / Я пытаюсь извлечь JSON из URL-адреса в объект.
Я смог дойти до того, что возвращает обещание, PromiseState: выполнено, а PromiseResults содержит объект с данными, которые я ищу.
async function readJSON(url:string) {
var request = new XMLHttpRequest();
request.open ('get', url, false)
request.send(null)
if (request.status == 200) {
return JSON.parse(request.responseText)
}
}
const systemJSON = readJSON('https://zkillboard.com/api/stats/solarSystemID/31000007/')
console.log(systemJSON)
Как я могу гарантировать, что моя консоль.журнал возвращает только результат PromiseResult?
Ответ №1:
Это, кажется, исправило это для меня, удалило асинхронность из функции, а также .responseText
в JSON.parse()
function readJSON(url:string) {
var request = new XMLHttpRequest();
request.open ('get', url, false)
request.send(null)
if (request.status == 200) {
return JSON.parse(request.response)
}
}
const systemJSON = readJSON('https://zkillboard.com/api/stats/solarSystemID/31000007/')
const printJSON = () =>{
console.log(systemJSON)
}
printJSON();
Ответ №2:
Во-первых, при обработке json из внешнего источника я бы предложил обернуть его в функцию try / catch, чтобы избежать неожиданных ошибок.
Во-вторых, я думаю, проблема в том, что readJSON возвращает обещание, поэтому вам, возможно, придется его дождаться.
try {
const json = await readJSON('https://zkillboard.com/api/stats/solarSystemID/31000007/')
const systemJSON = JSON.parse(json);
} catch (error) {
// Woops something happend - see error variable
}