Javascript React.js在执行第一个函数后设置回调函数
我一直在我的React.js/Redux应用程序的onClick事件上调用api。调用api之后,我必须根据第一个api的结果调用另一个api。所以我在考虑异步调用 我的代码: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
<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中等待。请检查以下内容以供参考: