Функция не ждет запроса на выборку - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь получить 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 никогда не показываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...