我有一个这样的情况:我正在进行几个(比如四个)ajax调用(使用AngularJS http get,如果那很重要),我希望每个调用都回调并递增一个计数器,以便我知道所有(四个)线程何时完成。
我的担忧是,由于JavaScript没有任何可与Java的“同步”或“易失性”关键字相媲美的东西,因此可能会发生多个并发线程在递增计数器时发生冲突,从而错过一些递增。
换句话说,两个线程同时到达,都读取计数器,获得相同的值(例如100)。然后两个线程都将计数器递增(到101),并存储新值,结果我们错过了一次计数(变成了101而不是102)!
我知道JavaScript应该是单线程的,但也有例外。
在浏览器中是否可能出现这种情况?如果是这样,有什么方法可以防止它发生吗?
我的担忧是,由于JavaScript没有任何可与Java的“同步”或“易失性”关键字相媲美的东西,因此可能会发生多个并发线程在递增计数器时发生冲突,从而错过一些递增。
换句话说,两个线程同时到达,都读取计数器,获得相同的值(例如100)。然后两个线程都将计数器递增(到101),并存储新值,结果我们错过了一次计数(变成了101而不是102)!
我知道JavaScript应该是单线程的,但也有例外。
在浏览器中是否可能出现这种情况?如果是这样,有什么方法可以防止它发生吗?
$q.all()
。$http
返回一个Promise,您可以包装一组Promise,并在它们全部完成时调用done。 - charlietfl