已履行的承诺存储而不是请求主体

Fulfilled promise stored rather than the request body

以下代码将 post 请求发送到 API,然后存储 API 的响应。存储的对象是已实现的承诺,而不是主体。我虽然我正在正确使用 .then,因为类似的东西适用于 get 请求。

每次发出 post 请求时都会调用以下 saga。它包含从 post 到对 reducer 的调用的所有内容。

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 答案(我将在 link 中编辑)。

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

我想你的问题就在这里

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

response.json()也是return一个承诺。

您需要 .then 关闭 json() 调用和 return 数据。

获取后我缺少收益。这最终成为我的解决方案

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 });
}