为了账号安全,请及时绑定邮箱和手机立即绑定

请教各位一个问题,求解答:js 怎么避免重复的异步操作(不问了,目前没办法后台做到,只能改造前端了)

请教各位一个问题,求解答:js 怎么避免重复的异步操作(不问了,目前没办法后台做到,只能改造前端了)

烙印99 2019-10-17 09:06:22
letx=0;functionadd(){returnnewPromise(resolve=>{if(x===1)returnresolve(x);//这里是一个异步操作setTimeout(()=>resolve(x+=1),1000);})}add().then(r=>console.log(r));add().then(r=>console.log(r));add().then(r=>console.log(r));我要怎么样保证add()在x===1时不会进行异步操作?而且我不知道会有多少个add()。具体场景是:用户进入一个页面时,会触发多个ajax,这些ajax的后台方法里都要调一次add()去验证一下权限(验证权限是个异步操作,即setTimeout),如果验证过了(即X===1),那就不用验证直接放行,否则拦截这个请求。
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

我看了你的需求,为什么不考虑在页面加载的第一个请求,先发add请求验证是否有权限,有权限的话再发,其他的请求,这是个同步关系的请求,或者使用token或session。
                            
查看完整回答
反对 回复 2019-10-17
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

不知道具体需求到底是什么哈,但是promise是eager的,一旦初始化就没法「不进行」了,但是你可以在x===1的时候reject:
functionadd(){
returnnewPromise((resolve,reject)=>{
if(x===1)reject(x);
//这里是一个异步操作
setTimeout(()=>resolve(x+=1),1000);
})
}
-----修改-----
如果是想要完全阻止后面操作的话,那就不要一次性开始三个promise了呀:
add().then(r=>{
console.log(r)
returnadd()
}).then(r=>{
console.log(r)
returnadd()
})
写成await一样的
                            
查看完整回答
反对 回复 2019-10-17
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信