Мне нужно сделать два вызова 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. Я почти уверен, что это можно сделать и с помощью отложенного объекта, но я не могу понять, как с ним справиться. Я новичок в этом, поэтому любая помощь будет оценена.