gpt4 book ai didi

javascript - AngularJS : multiple asynchronous AJAX calls

转载 作者:行者123 更新时间:2023-12-03 10:37:24 26 4
gpt4 key购买 nike

我正在调用多个 ajax 调用,但代码仅在执行所有 ajax 调用后才到达 API。

Javascript:

 function test = function(){
var entity = {};
entity.Number = 1;
appFactory.testPostCall(entity, 'ApiController/TestMethod');

entity.Number = 2;
appFactory.testPostCall(entity, 'ApiController/TestMethod');
}

应用工厂

factory.testPostCall = function (number, appendUrl) {
var q = $q.defer();

$http({
method: "POST",
url: url + appendUrl,
data: number
}).success(function (data, status, headers, config) {
q.resolve(data);
}).error(function (data, status, headers, config) {
q.reject(data);
});
return q.promise;
}

API

[HttpPost]
public Nullable<int> TestMethod(TestEntity entity)
{
return entity.Number;
}

我跟踪了如何通过断点运行代码。调用 test() 函数执行以下操作:

javascript -> appFactory
javascript -> appFactory
API
API
//with the parameter Entity having the value Entity.Number = 2 for both API calls.

我尝试在

处放置断点
entity.Number = 2; 

并等待 API 被调用,但代码似乎正在等待函数结束,直到 API 被调用。我对此行为感到非常困惑,我实际上期待类似以下的内容:

javascript -> appFactory -> API //entity.Number = 1

javascript -> appFactory -> API //entity.Number = 2

链接效果很好,但我需要独立运行,而且我真的想了解发生了什么。

    entity.Number = 1;
appFactory.testPostCall(entity, 'ApiController/TestMethod')
.then(function(data){
entity.Number = 2;
appFactory.testPostCall(entity, 'ApiController/TestMethod');
});

谢谢!!!

最佳答案

在这两种猜测中,您都将实体传递给您的函数。你猜怎么了?在 JS 中,所有对象都是通过引用传递的,而不是通过复制传递的。类似的问题到处都是:Why isn't this object being passed by reference when assigning something else to it?

您有两种可能获得您期望的行为:

  • 您可以使用闭包来确保参数按照您的意愿传递
  • 您可以浅复制对象

不过,我个人会选择第三种选择,即不要盲目地将对象传递给您的 API。

关于javascript - AngularJS : multiple asynchronous AJAX calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28940153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com