已履行的承诺存储而不是请求主体
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 });
}
以下代码将 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 });
}