es6中 async/await 处理异步
2018-11-28 本文已影响43人
eks
相信大家在网上已经看过很多解决异步的好方法,也可能看过很多别人写的async/await 处理异步的文章,
但是很多举例子都是使用一个setTimeout模拟数据处理,
今天在这里记录下使用axios处理数据请求的例子:
先上代码,
function requestFn (url,data){
return new Promise((resolve, reject) => {
axios({
method: 'POST',
url: `http://10.0.0.151:6060/${url}`,
data: data,
}).then((res) => {
resolve(res);
}).catch((err) => {
reject(err)
});
});
}
async function testFn() {
try {
let res1=await requestFn('getArticle.do', {});
if (res1.data){
return await requestFn('articleAddCount.do', {aid: res1.data[0].a_id});
}
} catch (e) {
throw e;
}
}
testFn().then(res => {
console.log('articleFn:', res);
}).catch(err => {
console.log('err:', err);
});
1.requestFn函数里面new一个Promise对象;
2.申明articleFn函数async function articleFn,函数体中的await表示等待requestFn处理完成之后再返回结果,
有了这个等待,我们就可以一行一行放心的写代码,避免了回调地狱;
3.调用函数articleFn().then().catch(),
这里的then()方法是处理success的函数,catch()捕获异常,
success的数据实在第2中try{}返回的数据,
第2中的throw抛出的异常在第3中的catch捕获;