博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es6 async与await实战
阅读量:4316 次
发布时间:2019-06-06

本文共 1933 字,大约阅读时间需要 6 分钟。

在使用js的时候,我们经常会遇到一个问题,就是我们需要等待请求返回再做下一步处理,之前的处理方式是通过ajax的success或者callback之类的方法,不过一层一层真的恶心,而且只是针对单个页面的业务,如果我们想把增删改查的业务封装起来,基本没可能,或者封装的很不优雅

下面来说一说通过async和await方式来辅助请求和封装

首先我们定义一个类,定义一个async方法,才可以使用await

class JForm extends React.Component {   handleSubmit = () => {            ...      this.handleInsert(obj)      ...            }   async handleInsert(obj) {      let url = '...'      let res = await insert(url, obj)      if(res){        this.hideModal();        this.props.refresh();      }    };}

  

上面是一个react的一段代码,当触发handleSubmit 表单提交方法,会调用handleInsert方法,此时会等await insert 执行完返回结果再执行if(res)的判断

我们再来看看重要的insert方法应该怎么写呢

export function insert(url, obj) {  return new Promise(function (resolve, reject) {    const hide = message.loading('正在新增...', 0);    let res = apiPost(url, obj).then(function (res) {      const {data, ret, msg} = res;      hide();      if(ret==200) {        Success(`添加1条数据`);      } else {        Error(res.msg);      }      resolve(ret==200?true:false)    })  })}

看起来貌似有点复杂?其实核心的代码只有下面的部分

export function insert(url, obj) {  return new Promise(function (resolve, reject) {      resolve(ret==200?true:false)  })}

  

对的,只有 return new Promise 和 resolve() ,resolve里面的data就是let res要接收的值了,我们可以在请求后将结果传入resolve即可。

 

如果场景不是react和class用不了async 和await 怎么办呢?其实我的insert方法下还有调用一个方法apiPost体也有resolve,

export const apiPost = (url, configObj) => {    if (typeof (configObj) === 'undefined') {        configObj = []    }    return new Promise(function (resolve, reject) {        const reqUrl = base.host + '/' + url + '?token=' + localStorage.getItem('token');        axios.post(reqUrl, qs.stringify({...configObj})).then(            response => {                let resulData = response.data                resolve(resulData)            }        );    })}

  

在insert可以使用.then(function (res) { 来接收resolve过来的值,不过一对比就会发现多了很多(),{}了,不过是底层一点方法,只写一两次,所有就无所谓啦,最重要还是保持视图应用层的简洁

不吹水了,新年快乐

 

转载于:https://www.cnblogs.com/cxscode/p/8444233.html

你可能感兴趣的文章
Linux下Qt+CUDA调试并运行
查看>>
51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
查看>>
OKMX6Q在ltib生成的rootfs基础上制作带QT库的根文件系统
查看>>
zabbix
查看>>
多线程基础
查看>>
完美解决 error C2220: warning treated as error - no ‘object’ file generated
查看>>
使用SQL*PLUS,构建完美excel或html输出
查看>>
前后台验证字符串长度
查看>>
《算法导论 - 思考题》7-1 Hoare划分的正确性
查看>>
win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)
查看>>
获取各种类型的节点
查看>>
表达式求值-201308081712.txt
查看>>
centos中安装tomcat6
查看>>
从Vue.js窥探前端行业
查看>>
学习进度
查看>>
poj3368 RMQ
查看>>
“此人不存在”
查看>>
github.com加速节点
查看>>
解密zend-PHP凤凰源码程序
查看>>
python3 序列分片记录
查看>>