首页 > 解决方案 > 如何使用延迟对象从一个 api 调用获取数据到另一个?

问题描述

我必须进行两次 api 调用——租户和用户。租户 api 返回所有现有租户的详细信息,用户 api 将返回特定租户中的所有用户。在第一次函数调用之后,我需要将租户 ID 与他们的详细信息进行映射。我必须将这些键值用作第二个 api 调用的参数(它采用租户 ID(整数))。在第二个 api 调用完成后,我必须为用户创建另一个映射,其中租户 ID 作为键,用户详细信息作为值。


    var tenants = {};
    var users = {};
    function func1() {
                    $.ajax({
                        dataType: 'json',
                        url: crudUrl("tenants"),
                        success: function (response) {
                            response.forEach(function (item) {
                                var TTId = item.Id.toString();
                                if (!("key" in tenants)) {
                                    tenants[TTId] = item;
                                }
                            })
                        }
                    });
                }

    function func2(key) {
                    return $.ajax({
                        dataType: 'json',
                        url: crudUrl("tenants/{tenantId}/users"),
                        data: {
                            tenantId: key
                        },
                        success: function (response) {
                            var detail = [];
                            var TTId = key;
                            response.forEach(function (item) {
                                var uid = {}
                                uid.Id = item.Id;
                                uid.Name = item.Name;
                                detail.push(uid);
                            })
                            users[TTId] = detail;
                        }
                    });
                }

       $.when(func1()).then(function () {
            for (var key of Object.keys(tenants)) {
                func2(parseInt(key));
            }
        });

上述方法有效,但网络负载过重,因为它必须在 func2 中为从 func1 获得的每个键进行多次 ajax 调用。我很确定这也可以使用延迟对象来完成,但我不知道如何使用它。我是新手,所以任何帮助将不胜感激。

标签: jqueryajaxkendo-gridjquery-deferred

解决方案


推荐阅读