Я пытаюсь получить JSON с сервера в качестве исходного состояния.Но похоже, что функция не ждет ответа.
Я просматривал различные сообщения Stackoverflow, такие как Как вернуть ответ из обратного вызова обещания с fetch? но ответы, которые я нашел, не далиКажется, это не помогает.
// Get the best initial state available
// 1. Check for local storage
// 2. Use hardcoded state with the test value from the server.
export function getInitialState() {
if (localStorage.getItem('Backup') != undefined) {
return returnValue = Map(JSON.parse(localStorage.getItem('Backup')))
} else {
var returnValue = initialState
const GetJSON = (url) => {
let myHeaders = new Headers();
let options = {
method: 'GET',
headers: myHeaders,
mode: 'cors'
};
return fetch(url, options).then(response => response.json());
};
GetJSON('https://example.com/api/v1/endpoint/valid/').then(result => {
// Console.log gives a good result
console.log(result)
// The return is undefined
return returnValue.setIn(['test'], result)
});
}
}
В этом случае я получаю неопределенное значение, в то время как я ожидаю, что returnValue JSON, где свойство test обновляется с сервера.
Так что я действительно хочуФункция getInitialState () для возврата состояния.И для этого нужно дождаться окончания загрузки.Я также пытался разместить return перед GetJSON, но это не имело никакого эффекта.
Ок, поэтому я просто попробовал следующее:
GetJSON('https://example.com/api/v1/endpoint/valid/').then(result => {
console.log('aaa')
console.log(result)
localstorage.setItem('init', result)
console.log('bbb')
}).then(result => {
console.log('done')
});
Это возвращает ааа и результат.Но localStorage никогда не устанавливается, а bbb и done никогда не показываются.