React native 调用TouchableOpacity时未正确等待异步操作创建者';新闻界
我面临一个问题,我似乎找不到我犯的错误。我基本上有一个简单的redux thunk动作创建者,其中包含一些axios调用。我使用React native 调用TouchableOpacity时未正确等待异步操作创建者';新闻界,react-native,redux,react-redux,redux-thunk,React Native,Redux,React Redux,Redux Thunk,我面临一个问题,我似乎找不到我犯的错误。我基本上有一个简单的redux thunk动作创建者,其中包含一些axios调用。我使用connect将我的组件连接到此动作创建者,然后以异步方法调用它,该方法将传递给touchablyocapacityonPress prop 简化代码: 动作创建者: export const createUploadEntry = ( step, image, base64, width, height, submiss
connect
将我的组件连接到此动作创建者,然后以异步方法调用它,该方法将传递给touchablyocapacity
onPress prop
简化代码:
动作创建者:
export const createUploadEntry = (
step,
image,
base64,
width,
height,
submissionEntry
) => async (dispatch, getState) => {
dispatch(createUploadEntryStart());
try {
const response = await axios.put(...);
console.log("finished creating submission entry");
dispatch(createUploadEntrySuccess(response.data));
} catch (error) {
...
}
}
Index.js
import { connect } from "react-redux";
import Component from "./component";
import { createUploadEntry } from "../../../../store/actions/trainings";
export default connect(
null,
{ createUploadEntry }
)(Component);
const Test = (props) => {
const onPressed = async () => {
console.log("start awaiting");
await props.createUploadEntry(...);
console.log("finished awaiting");
props.navigateToNext();
}
return <TouchableOpacity onPress={onPressed}>...</TouchableOpacity>
}
Component.js
import { connect } from "react-redux";
import Component from "./component";
import { createUploadEntry } from "../../../../store/actions/trainings";
export default connect(
null,
{ createUploadEntry }
)(Component);
const Test = (props) => {
const onPressed = async () => {
console.log("start awaiting");
await props.createUploadEntry(...);
console.log("finished awaiting");
props.navigateToNext();
}
return <TouchableOpacity onPress={onPressed}>...</TouchableOpacity>
}
const测试=(道具)=>{
const onPressed=async()=>{
console.log(“开始等待”);
等待道具。createUploadEntry(…);
控制台日志(“完成等待”);
props.navigateToNext();
}
返回。。。
}
然后我在控制台中得到的输出是:
- 开始等待
- 完成等待
- 已完成创建提交条目
export const createUploadEntry = (
step,
image,
base64,
width,
height,
submissionEntry
) => async (dispatch, getState) => {
dispatch(createUploadEntryStart());
try {
const response = await axios.put(...);
console.log("finished creating submission entry");
dispatch(createUploadEntrySuccess(response.data));
return response;
} catch (error) {
...
}
}
尝试此
返回响应代码>发现是另一个中间件搞砸了redux thunk。createUploadEntry在这里不是异步的,它返回一个异步的函数。在分派createUploadEntrySuccess
后尝试返回resp
。@Clarity无法解决问题。您是否尝试了TouchableHighlight
而不是TouchableOpacity
?我知道这似乎没有什么关系,但是TouchableOpacity
有一些非常讨厌的bug,只有在非常特定的环境下才能复制,你的可能会受到影响。@CanPoyrazoğlu还没有想到,我会尝试一下,然后回来找你!谢谢你的意见@CanPoyrazoğlu似乎没有什么不同,不幸的是,请尝试返回语句和Action的响应。该建议已在评论中讨论过,我认为,如果函数不返回任何将导致承诺的内容或返回将导致承诺的内容,则不应产生任何差异,这仍然是一个承诺。所以这并不能解决我的问题。我想知道为什么有人对一个合法的问题投了反对票,并(尽管这只是一个愚蠢的错误)给出了答案。