React 博客系列 (3) Promise异步更新React状态
2018-02-03 23:38
447 查看
Promise封装axios数据查询
github个人博客源码持续更新中。。。小白在实施的过程中,前端请求数据刷新数据遇到了数据同步的问题。
数据请求方法
getAtricles() { console.log("getAtricles") const url = `${CONFIG.server}/api/article/queryall` var result; console.log(url) axios.post(url) .then(function(response) { if (response.data.status == -1) { message.info(response.data.msg); } else { console.log("查询成功") return response.data.result; } }) .catch(function(error) { message.info(error); }) }
状态刷新方法
reloadData = () => { this.setState({ loading: true }); console.log("开始查询"); let atricles = this.getAtricles(); console.log(atricles); let data = []; console.log("结果映射"); atricles.map((item, index) => { data.push({ key: item._id, index: index, title: item.title }); }) console.log("更新状态"); this.setState({ selectedRowKeys: [], loading: false, data: data }); }
执行后结果
开始查询
undefined
结果映射
×××报错
查询成功
未待查询结果返回,就执行了状态刷新,故 console.log(atricles)会出现undefined
解决方法
查阅资料后,用Promise解决此问题
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
数据请求方法返回promise
getAtricles() { console.log("getAtricles") const url = `${CONFIG.server}/api/article/queryall` var result; var promise = new Promise((resolve, reject)=> { console.log(url) axios.post(url) .then(function(response) { if (response.data.status == -1) { message.info(response.data.msg); } else { console.log("查询成功") resolve(response.data.result); } }) .catch(function(error) { message.info(error); }) }) return promise; }
状态刷新方法在resolve中执行,个人理解resolve,reject都是一种回调函数callback
reloadData = () => { this.setState({ loading: true }); console.log("开始查询"); const promise = this.getAtricles(); promise.then(atricles => { console.log(atricles); let data = []; if (!atricles) return; console.log("结果映射"); atricles.map((item, index) => { data.push({ key: item._id, index: index, title: item.title }); }) console.log("更新状态"); this.setState({ selectedRowKeys: [], loading: false, data: data }); }).catch((error) => { message.error(error) }); }
执行结果
开始查询
查询成功
atricles [Object]
结果映射
更新状态
相关文章推荐
- React 博客系列 (2) React中的state和props更新
- 小白使用React---子组件的状态变化更新到父组件中
- 技术文章系列汇总(持续更新中)并附博客上树状列表源代码
- React-Native系列Android——Touch事件原理及状态效果
- 《React-Native系列》React-Native实战系列博客汇总
- Dynamics CRM 2011编程系列(1):系统实体状态更新
- React 博客系列 (1) 搭建的个人博客
- React总结1:异步更新的setState
- 窥探Swift系列博客说明及其Swift版本间更新
- React-Native系列Android——Touch事件原理及状态效果
- 短时间内多个请求状态更新,导致react 不能及时响应问题总结
- Winform实现多线程异步更新UI(进度及状态信息)
- elasticsearch 学习博客系列<五> ES 中 index-doc 的 更新(java)
- 更新博客系列
- 深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
- hibernate系列二:hibernate中java对象的三种状态及数据更新的4种方式
- React系列四——state状态
- WPF中异步更新Command可用逻辑时按钮状态没有更新
- c#中Winform实现多线程异步更新UI(进度及状态信息)
- WPF:在异步操作中使用CommandManager手动更新Command执行状态(转载)