异步函数发展的三个阶段:
1, callback
setTimeout( ()=>{},1000); 容易造成callback hell;
2,promise
还是需要不停的。then().then();
3,async +await
就是generator 优化 promise的产物; async和await 要配合使用 ,这是es7 的内容
具体使用:
原来代码:
export function readmsg(chatman) { return (dispatch,getState)=>{ axios.post('/user/readmsg',{from:chatman}).then(res=>{ if(res.data.code===0){ const userid=getState().user._id; dispatch(readtype(chatman,userid,res.data.num)) } }) } }
改写以后的代码:
export function readmsg(chatman) { //首先使这个函数变成一个async函数 return async (dispatch,getState)=>{ //等待异步调用完成 const res=await axios.post('/user/readmsg',{from:chatman}); if(res.data.code===0){ const userid=getState().user._id; dispatch(readtype(chatman,userid,res.data.num)) } } }
首先使得这个代码变成一个async函数;其次把then()去掉 ,等待回掉完成,在进行操作;
好处是:使得这个异步函数 变成同步的方式来调试; 可读性 大大的提高了