Как получить данные из одного вызова API в другой, используя отложенный объект? - PullRequest
0 голосов
/ 12 февраля 2020

Мне нужно сделать два вызова API - арендаторов и пользователей. API арендатора возвращает все существующие данные арендатора, а пользователь API возвращает всех пользователей в конкретном арендаторе. Мне нужно сопоставить идентификаторы арендаторов с их деталями после первого вызова функции. Я должен использовать эти значения ключа в качестве параметра для второго вызова API (который принимает идентификаторы арендатора (целое число)). После завершения второго вызова API я должен создать еще одну карту для пользователей с идентификаторами арендатора в качестве ключа и сведениями о пользователе в качестве значения.


    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));
            }
        });

Приведенный выше метод работает, но сеть становится слишком загруженной, поскольку она имеет сделать несколько ajax вызовов в func2 для каждого из ключей, полученных из func1. Я почти уверен, что это можно сделать и с помощью отложенного объекта, но я не могу понять, как с ним справиться. Я новичок в этом, поэтому любая помощь будет оценена.

...