我正在将JHipster与React前端配合使用,并且在以下方面遇到了很大的问题:
function confirmRent() {
const { rentEntity } = props;
const entity = {
...rentEntity,
...rentValues
};
props.createRent(entity);
/* execute this after createRent has finished
const rentScsV = (res.value.status >= 200 && res.value.status < 300);
props.history.push({
pathname: "/",
state: { rentScs: rentScsV }
});
*/
}
功能
createRent
位于另一个文件中export const createRent: ICrudPutAction<IRent> = entity => async dispatch => {
const result = await dispatch({
type: ACTION_TYPES.CREATE_RENT,
payload: axios.post(apiUrl, cleanEntity(entity))
});
dispatch(getEntities());
return result;
};
我要在
createRent
完成后执行注释的代码。我试过在
createRent
中返回一个Promise并添加.then()
:我得到一个'then'属性不存在。我尝试添加回调:它不会执行,因为
createRent
无法访问历史记录。我试过像这样在
await
中添加confirmRent
async function confirmRent() {
...
await props.createRent(entity);
/* execute the rest */
}
我收到一个
Unexpected 'await' of a non-Promise (non-"Thenable") value
错误。据我所知,我无法更改
createRent
签名,因为其他模块中的许多其他功能都依赖于它。是否有人对如何解决此问题有想法?谢谢!
最佳答案
我不知道JHipster是什么,但是如果我没看错的话,createRent
本身并不是一个异步函数,它只是返回一个异步函数,因此props.createRent(entity);
调用实际上会在其后的代码之前执行。
[如果我写的是const add = x => y => x + y
而不是const add = (x, y) => x + y
,那么我必须将其称为add(5)(3)
而不是add(5, 3)
。
要实际使用它,您需要存储它返回的值,可以在其上使用.then()
,例如:
const cr = props.createRent(entity);
cr(dispatch).then(res => {
const rentScsV = (res.value.status >= 200 && res.value.status < 300);
props.history.push({
pathname: "/",
state: { rentScs: rentScsV }
});
)
或者您可以跳过中介变量并立即调用返回的函数:
props.createRent(entity)(dispatch).then(res => {
const rentScsV = (res.value.status >= 200 && res.value.status < 300);
props.history.push({
pathname: "/",
state: { rentScs: rentScsV }
});
)