Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs中的并发性_Javascript_Angularjs_Asynchronous_Concurrency - Fatal编程技术网

Javascript Angularjs中的并发性

Javascript Angularjs中的并发性,javascript,angularjs,asynchronous,concurrency,Javascript,Angularjs,Asynchronous,Concurrency,我有一个angular应用程序,它使用$http.get执行大量异步调用,并且我的作用域中有一个count变量($scope.count),它跟踪我发出的请求数量和仍挂起的请求数量。显然,我是这样使用它的: 在发出$http.get请求之前,我将计数增加1 当我从$http.get获得响应时,我将计数减少1 我发出了很多请求,大约有2000个请求同时发出,但是$scope.count值不会返回到0,即使在所有请求完成后,它也总是大于0(总是关闭1或2)。我正在为$http.get调用处理成功

我有一个angular应用程序,它使用$http.get执行大量异步调用,并且我的作用域中有一个count变量($scope.count),它跟踪我发出的请求数量和仍挂起的请求数量。显然,我是这样使用它的:

  • 在发出$http.get请求之前,我将计数增加1
  • 当我从$http.get获得响应时,我将计数减少1
我发出了很多请求,大约有2000个请求同时发出,但是$scope.count值不会返回到0,即使在所有请求完成后,它也总是大于0(总是关闭1或2)。我正在为$http.get调用处理成功和错误事件,并且每当其中一个事件发生时,我都会减少计数


所以我想知道angular/javascript是否能很好地处理并发性?我想我运行了很多次增量操作(可能同时运行了很多次),而$scope.count的值变得过时/错误,因为两个操作可以同时修改变量。

Javascript运行单线程(事件循环),因此并发问题不可能出现

您应该尝试使用拦截器。该文档具有很大的实用价值


您可以将计数放在
$rootScope

不可能的情况下,javascript运行单线程。可以缓存。你怎么算?因为它应该在每个请求之前使用$scope.count+=1,在每个响应之后使用$scope.count-=1。您可以将开始、成功、错误和计数打印到控制台。然后看看发生了什么。为什么要计算http请求?也许(只是猜测)计数并不是解决您问题的最佳方案?我不确定您的用例是什么,但您可能感兴趣的是,我从哪里可以了解到JS实际上是如何在事件循环中执行承诺的?例如,除非另有保证,否则理论上是可能的,在一个函数的中间,它被挂起,另一个被运行,然后前者也被恢复,如果JS承诺一个接一个地运行,那么Angular的$q.all并行执行它的承诺肯定是错误的。但在这种情况下,像这样的问题没有意义。或者,如果不是在浏览器中运行,而是在node.js中运行,那么执行实际上是并行的吗?您可以阅读相关内容,谢谢!因此,如果我没有弄错,没有JS代码与其他JS代码同时运行,但是像XHR通信这样的非JS活动实际上可以由宿主环境同时执行。例如,异步XHR请求实际上可以与JS代码并发运行,然后它的回调可以与JS代码非并发运行。