ReactJS/Redux/Axios 等待服务器请求完成
ReactJS/Redux/Axios Wait for server request to finish
我有以下代码:
handleDeleteBlackList(id, event) {
this.props.actions.deleteBlackListItem(id, this.props.token);
this.props.actions.fetchBlackListItems(this.props.token);
}
第一行从某个网络服务中删除一条记录,第二行获取更新后的数据。有时系统在执行第二个请求之前不会等待第一个请求完成并且我的 "updated" 数据根本没有更新...
我正在寻找一些解决方案来等待第一个请求完成,然后执行第二个请求。
编辑:
我已经在使用 setTimeout 函数的解决方法,但它应该有更好的修复方法...
尝试使用承诺!
查看 google 有关承诺的文档!
https://developers.google.com/web/fundamentals/getting-started/primers/promises
handleDeleteBlackList(id, event) {
return new Promise(function(accept,reject) {
perform_first_request()
.then(function(){
perform_second_request()
})
})
}
也许使用 async/await。
async handleDeleteBlackList(id, event) {
const actionResponse = await this.props.actions.deleteBlackListItem(id, this.props.token);
// No idea what you have set your type: to in your action so I just made this up
if (actionResponse && actionResponse.type === 'DELETE_SUCCESS'){
this.props.actions.fetchBlackListItems(this.props.token);
}
}
这取决于您如何组织您的行动。需要查看 deleteBlackListItem
的代码
Axios中有finally()方法,在调用结束后运行。像其他方法一样; then() 和 catch(), finally() 方法在收到响应后被调用。但请记住,无论您的请求结果是什么(成功或失败),都会调用此方法。尝试在 finally() 方法中编写第二个请求,例如
.finally(() => {
your_second_request();
});
我有以下代码:
handleDeleteBlackList(id, event) {
this.props.actions.deleteBlackListItem(id, this.props.token);
this.props.actions.fetchBlackListItems(this.props.token);
}
第一行从某个网络服务中删除一条记录,第二行获取更新后的数据。有时系统在执行第二个请求之前不会等待第一个请求完成并且我的 "updated" 数据根本没有更新...
我正在寻找一些解决方案来等待第一个请求完成,然后执行第二个请求。
编辑:
我已经在使用 setTimeout 函数的解决方法,但它应该有更好的修复方法...
尝试使用承诺!
查看 google 有关承诺的文档!
https://developers.google.com/web/fundamentals/getting-started/primers/promises
handleDeleteBlackList(id, event) {
return new Promise(function(accept,reject) {
perform_first_request()
.then(function(){
perform_second_request()
})
})
}
也许使用 async/await。
async handleDeleteBlackList(id, event) {
const actionResponse = await this.props.actions.deleteBlackListItem(id, this.props.token);
// No idea what you have set your type: to in your action so I just made this up
if (actionResponse && actionResponse.type === 'DELETE_SUCCESS'){
this.props.actions.fetchBlackListItems(this.props.token);
}
}
这取决于您如何组织您的行动。需要查看 deleteBlackListItem
Axios中有finally()方法,在调用结束后运行。像其他方法一样; then() 和 catch(), finally() 方法在收到响应后被调用。但请记住,无论您的请求结果是什么(成功或失败),都会调用此方法。尝试在 finally() 方法中编写第二个请求,例如
.finally(() => {
your_second_request();
});