React native 调用TouchableOpacity时未正确等待异步操作创建者';新闻界

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

我面临一个问题,我似乎找不到我犯的错误。我基本上有一个简单的redux thunk动作创建者,其中包含一些axios调用。我使用
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();
}
返回。。。
}
然后我在控制台中得到的输出是:

  • 开始等待
  • 完成等待
  • 已完成创建提交条目
action creator需要上传图像,因此需要一些时间,在“开始等待”之后会调用“完成等待”

我希望我已经足够好地描述了我的问题,并提前感谢任何帮助

干杯

看一看

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的响应。该建议已在评论中讨论过,我认为,如果函数不返回任何将导致承诺的内容或返回将导致承诺的内容,则不应产生任何差异,这仍然是一个承诺。所以这并不能解决我的问题。我想知道为什么有人对一个合法的问题投了反对票,并(尽管这只是一个愚蠢的错误)给出了答案。