Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React.js在执行第一个函数后设置回调函数_Javascript_Reactjs_Callback_Redux_React Redux - Fatal编程技术网

Javascript React.js在执行第一个函数后设置回调函数

Javascript React.js在执行第一个函数后设置回调函数,javascript,reactjs,callback,redux,react-redux,Javascript,Reactjs,Callback,Redux,React Redux,我一直在我的React.js/Redux应用程序的onClick事件上调用api。调用api之后,我必须根据第一个api的结果调用另一个api。所以我在考虑异步调用 我的代码: <a href="" onClick={(e) => this.sendData(e)} >Send</a> 但目前这两个API同时调用。任何帮助 > P>你应该考虑使用Asic/Acess模式来很好地处理这个场景。您的代码将如下所示: const sendData = async mes

我一直在我的React.js/Redux应用程序的onClick事件上调用api。调用api之后,我必须根据第一个api的结果调用另一个api。所以我在考虑异步调用

我的代码:

<a href="" onClick={(e) => this.sendData(e)} >Send</a>

但目前这两个API同时调用。任何帮助

> P>你应该考虑使用Asic/Acess模式来很好地处理这个场景。您的代码将如下所示:

const sendData = async message => {
    const messageId = await sendDataApi(message)
    const details = await getDetails(messageId)
    return details
}
const sendData = message => {
    sendDataApi(message)
    .then(messageId => getDetails(messageId))
}
但是,如果您不能使用最新的语言功能,您可以使用
Promise
s。请记住,代码更容易出现回调地狱,它们可能还需要填充

带有承诺的相同代码如下所示:

const sendData = async message => {
    const messageId = await sendDataApi(message)
    const details = await getDetails(messageId)
    return details
}
const sendData = message => {
    sendDataApi(message)
    .then(messageId => getDetails(messageId))
}
这段代码仅仅是承诺问题的一个例子,因为它可以简化为
sendDataApi(message).then(getDetails)
。当存在复杂的条件逻辑、错误处理、更多任务和参数传递时,就会出现问题

React处理异步性非常差,Redux也是如此。您需要使用或其他中间件。这样,您就可以从action creator发送另一个操作(
continuation
trunk
saga
-您可以指定)。它可能会变得单调乏味,需要大量的样板文件,并且很难调试。您可以考虑离开ReDux同步状态管理,并考虑其他类型的解决方案(也许?)。 请使用React的默认设置
setState
(请参阅控制台输出)

与实现类似(其他操作不显示,没有错误处理等):


使用redux处理异步调用的最佳位置是直接在action creator中。我的意思是等待异步调用的结果,Creator有办法通过回调来实现!谢谢你的详细回复,我会用这个来解决我的问题。非常感谢!我使用了异步、等待技术,它成功了。再次感谢。对于将来看到这个问题的人,请使用
babel polyfill
,因为需要使用async,请在React中等待。请检查以下内容以供参考: