账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么这个程序用回调和async-await的执行不同
    16
    0
    我有一个上传图片的队列const img_queue=[] as {posturl:string,data:any,cb:Function,err:Function}[]function img_add(posturl:string,data:any,cb:Function,err:Function) { img_queue.push({posturl,data,cb,err}) if(img_queue.length==1){ axios.post(posturl,data) .then(result=>{ img_remove(result,false) }) .catch(err=>{ img_remove(err,true) }) }}function img_remove(result:any,err:boolean){ const one=img_queue.shift(); (!err)&&one&&one.cb&&one.cb(result); err&&one&&one.err&& one.err(result); if(img_queue.length>0){ axios.post(img_queue[0].posturl,img_queue[0].data) .then(result=>{ img_remove(result,false) }) .catch(err=>{ img_remove(err,true) }) }}api.post('/uploadImg',(req,res)=>{ //....... img_add(posturl,data, (result:any)=>{ res.json(result) }, (err:any)=>{ res.status(500).json(err) } )}) 这样用回调的方式写运行结果是正确的但当我改用async await形式时:const img_queue=[]as {posturl:string,data:any,cb:Function,err:Function}[]async function img_add(posturl:string,data:any,cb:Function,err:Function) { img_queue.push({posturl,data,cb,err}) if(img_queue.length==1){ try{ const result= await axios.post(posturl,data) await img_remove(result,false) }catch(err){ await img_remove(err,true) } }}async function img_remove(result:any,err:boolean){ const one=img_queue.shift(); (!err)&&one&&one.cb&&one.cb(result); err&&one&&one.err&&one.err(result); if(img_queue.length>0){ try{ const result=await axios.post(img_queue[0].posturl,img_queue[0].data) await img_remove(result,false) }catch(err){ await img_remove(err,true) } }}api.post('/uploadImg',async(req,res)=>{ //..... await img_add(posturl,data, (result:any)=>{ res.json(result) }, (err:any)=>{ res.status(500).json(err) } )})程序的执行似乎不同:队列中的回调函数似乎只有第一个执行了请问这是为什么呢?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答