0
let x=0;

function add() {
    return new Promise(resolve => {
        if (x===1) return resolve(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),那就不用验证直接放行,否则拦截这个请求。

toesbieya 366
2019-09-11 提问

查看全部 7 个回答

1

你这是写在node里的吧?

身份认证一定是异步动作,而且确实每个接口都需要进行验证。
所以,也就没有什么是否已经验证过的问题。

在接收到请求的第一步,就是鉴权(当然前面还有路由分发)。鉴权完毕后再进入主程序。
所以这是唯一入口,不存在多次的问题。

推荐答案

2

我看了你的需求,为什么不考虑在页面加载的第一个请求,先发add请求验证是否有权限,有权限的话再发,其他的请求,这是个同步关系的请求,或者使用token或session。

推广链接