Выполненное обещание сохранено, а не тело запроса - PullRequest
0 голосов
/ 08 января 2020

Следующий код отправляет запрос на публикацию в API, а затем сохраняет ответ API. Сохраненный объект - это выполненное обещание, а не тело. Я думал, что правильно использовал .then, поскольку нечто подобное работает для запроса get.

Следующая сага вызывается каждый раз, когда делается запрос на публикацию. Он содержит все: от почты до звонка и звонка на редуктор.

function* setData(action) {
        const url = action.payload.url;
        const data_obj = action.payload.data;
        console.log(action);
        try {
        const json = fetch(url, {
            method: "post",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },

            body: JSON.stringify(data_obj)
        })
        .then(statusHelper)
        .then(response => response.json());
        yield put({ type: "DATA_SENT", payload: json });
        }
        catch (e)
        {
                yield put({ type: ERROR_OCCURED, payload: { error : {message: "An Error occured sending HIT data. Please try again later"}}});

        }

}

Ниже приведена функция statusHelper. Это пришло из другого SO ответа (я отредактирую в ссылке).

function statusHelper (response) {
  if (response.status >= 200 && response.status < 300) {
    return Promise.resolve(response)
  } else {
    return Promise.reject(new Error(response.statusText))
  }
}

Ответы [ 2 ]

1 голос
/ 08 января 2020

Я думаю, что ваша проблема здесь

.then(response => response.json());

response.json() также возвращает обещание.

Вам необходимо .then от json() вызова и верните данные.

0 голосов
/ 10 января 2020

Мне не хватало урожая после получения. Это оказалось решением для меня

function* setData(action) {
        const url = action.payload.url;
        const data_obj = action.payload.data;
        let json;
        try {
        const response = yield fetch(url, {
            method: "post",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },

            body: JSON.stringify(data_obj)
        });
        //const resp = statusHelper(response);
        console.log('Response: ', response, response.status)
        if(response.status >= 200 && response.status < 300)
        {
                json = yield response.json();
        }
        console.log("JSON: ", json);
        }
        catch (e)
        {
                yield put({ type: ERROR_OCCURED, payload: { error : {message: "An Error occured sending HIT data. Please try again later"}}});
        return;
        }

        yield put({ type: "DATA_SENT", payload: json });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...