举个例子,A.js里有个a方法,B.js和C.js都调用A里面的a方法,单线程执行,假设现在B先调用a,但是a还没执行完,然后切换到C要开始调用a,如何保证只有在B执行完a后,C才能调用a
@captainblue2013 对,我原来是java的,现在学node,在弄邮箱和微信,access_token想全局缓存,即第一次http请求获取后,在缓存失效前全部都用缓存,现在第一次还没请求完,第二次请求都发出去了,然后access_token被刷新了,直接地想到锁住获取access_token的方法,思维还没转过来,有什么好的办法?
我理解一下,可能说的不对。欢迎指出。 你说的线程应该主线程吧?那么主线程调用的方法中如果你没有写yield、await。那么他们一定是等方法执行完了才会切换的。 如果你在a()中写了yield,那么是否是写法不恰当?
@guojinlong 因为a方法里有http请求,比如B调用a的时候,缓存过期了,然后发起http请求,还没执行回调,然后到C调用a,因为B的http回调还没执行,缓存还没更新,所以C也发起http请求,接着B的http请求回调执行了,把缓存更新了一次,【然后C的http请求回调又把缓存更新了】。我的目的是缓存过期只需更新一次。
@xupeng086 java一台的话就好弄,写个单例就可以了,多台的话个人做法选一台出来专门提供这个全局缓存的服务。现在我用node弄全局缓存就是卡在缓存要刷新的时候要使用access_token的js(2个以上)发起http请求的回调把access_token多次刷新了。