AngularJS : 多个异步 AJAX 调用
AngularJS : multiple asynchronous AJAX calls
我正在调用多个 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');
}
AppFactory
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;
}
我追踪了如何通过断点对 运行s 进行编码。调用 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');
});
谢谢!!!
您在两次猜测中都将 entity
传递给您的函数。你猜怎么着?在 JS 中,所有 对象都是通过引用传递的,而不是通过复制传递的。类似问题遍及SO:Why isn't this object being passed by reference when assigning something else to it?
您有两种可能获得您期望的行为:
- 您可以使用闭包来确保参数按您的意愿传递
- 你可以浅拷贝你的对象
不过,我个人会选择第三种选择,即不要盲目地将对象传递给您的 API。
我正在调用多个 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');
}
AppFactory
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;
}
我追踪了如何通过断点对 运行s 进行编码。调用 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');
});
谢谢!!!
您在两次猜测中都将 entity
传递给您的函数。你猜怎么着?在 JS 中,所有 对象都是通过引用传递的,而不是通过复制传递的。类似问题遍及SO:Why isn't this object being passed by reference when assigning something else to it?
您有两种可能获得您期望的行为:
- 您可以使用闭包来确保参数按您的意愿传递
- 你可以浅拷贝你的对象
不过,我个人会选择第三种选择,即不要盲目地将对象传递给您的 API。