当前位置: 首页 > 知识库问答 >
问题:

AngularJS:多个异步AJAX调用

易修洁
2023-03-14

我调用了多个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;
        }
javascript -> appFactory
javascript -> appFactory
API
API 
//with the parameter Entity having the value Entity.Number = 2 for both API calls.
entity.Number = 2; 
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');
    });

谢谢!!!

共有1个答案

毋修为
2023-03-14

在两种猜测中,您都将entity传递给您的函数。猜猜看?在JS中,所有对象都是通过引用而不是复制传递的。类似的问题已经结束了:为什么在给这个对象分配其他东西时,它不是通过引用传递的?

你有两种可能会有你所期望的行为:

  • 您可以使用闭包来确保参数按您所希望的方式传递
  • 可以浅表复制对象
 类似资料:
  • 我正在开发一个移动应用程序,现在我正在进行身份验证。在我访问我的主页之前,我需要访问我构建的API上的各种endpoint,然后才能向用户显示数据。 在Postman中测试时,所有endpoint都返回了正确的数据,但是当我在应用程序中使用它时,我在第二次异步调用中得到了一个值。 我确信这与这些呼叫的顺序有关,所以我只是在寻找一些帮助,如何在开始另一个呼叫之前正确地等待一个呼叫完成。

  • 问题内容: 如何在异步forEach循环后添加回调函数? 这里是一些更好的上下文: 控制器: 服务: 问题答案: 正如安德鲁所说,使用和延迟对象应该可以使您实现目标。 您想使用 这将确保您的所有promise对象都已解析,然后您可以回叫 jsfiddle上的示例 可以,但不能通话 使用延迟对象,您可以访问Promise,在此可以一起更改连续的调用。解析延迟的对象时,它将执行foreach,然后执行

  • 问题内容: 嗨,我的脚本中有2个Ajax调用,我需要它们运行asnyc以节省时间,但是我需要第二个才能等待第一个完成。 有什么想法吗?谢谢 问题答案: 如果使用jQuery 1.5+,则可以使用jQuery 完成。诸如此类的东西(缩短了ajax的简洁性,只需像上面那样传递对象) 您不知道它们将以什么顺序返回,因此,如果您手动滚动此请求,则需要检查另一个请求的状态并等待它返回。

  • 问题内容: 事情是:我有一个页面,其中必须显示未确定数量的图像,这些页面是通过AJAX(在服务器端使用base64编码)一张一张地加载的。 问题是仅当获取所有图像时,才将图像(由renderImageData()函数构造)附加到所有DIV中(一起)。我的意思是,直到循环结束,才有可能进行任何DOM操作。 由于可能会有大量的图像,因此我需要一张一张地加载和显示图像,因此我无法将它们堆叠起来,直到将它

  • 本文向大家介绍angularjs 处理多个异步请求方法汇总,包括了angularjs 处理多个异步请求方法汇总的使用技巧和注意事项,需要的朋友参考一下 在实际业务中经常需要等待几个请求完成后再进行下一步操作。但angularjs中$http不支持同步的请求。 解决方法一: 解决方法二: then中的方法会按顺序执行。 解决方法三: $q.all方法第一个参数可以是数组(对象)。在第一参数中内容都执

  • 问题内容: 同步和异步AJAX调用有什么区别?何时使用同步以及何时异步? 问题答案: 在最基本的级别上,当您希望调用在后台发生时,您可以使用异步模式,而当您希望代码等待直到调用完成时,则可以使用同步模式。 异步模式是AJAX调用的常用方法,因为通常在事件上附加一个回调函数,以便您可以在服务器端数据就绪时进行响应,而不必等待数据到达。