Я пытаюсь получить присутствие членов Команды (Microsoft Teams) в al oop, используя конечную точку присутствия Garph API (бета), но ответ не получен в ожидаемом порядке и задерживается для некоторых идентификаторов пользователей. У меня есть массив членов команды:
let users = [{"UserId": "user1id"}, {"UserId": "user2id"},{"UserId": "user2id"}];
с использованием graph client
(предоставляется SharePoint Framework) в array.map()
this.props.context.msGraphClientFactory.getClient().then((client: MSGraphClient): void => {
this.users.map((item,key) => {
// get information about the current user from Microsoft Graph API
client
.api('/users/'+item.UserId+'/presence')
.version("beta")
.get((error, res) : Promise<any> => {
return new Promise((resolve, reject) => {
if(error) {
alert("Error in fetching presence status: "+ error);
console.log("Error in fetching presence status: "+ error);
reject(error);
}
this.userPresenceProperties = res;
resolve( this.userPresenceProperties);
})
.then((response: IUserPresenceProperties) => {
this.usersWithPresence.push(response);
console.log(item.displayName + ":"+ this.usersWithPresence[key].availability);
})
.catch((err) => {
alert("Error in getting presence info: " + err)
})
});
});
});
}
Иногда приведенный выше код выполняется и отображает правильный ответ в консоль для звонков, но в большинстве случаев это приводит к ошибке на console.log(item.displayName + ":"+ this.usersWithPresence[key].availability);
для определенных пользователей в массиве users
. В предупреждении отображается следующее сообщение об ошибке:
"Ошибка при получении информации о присутствии: невозможно прочитать свойство 'availablebilty' из неопределенного" *
"Это означает, что массив usersWithPresence
не заполнен по текущему индексу (ключу). Я попытался использовать Promise , чтобы гарантировать, что ответ будет возвращен до заполнения массива usersWithPresence
, но все равно иногда получат вышеупомянутую ошибку, а иногда все идет нормально. Это не похоже на проблему с платформой / фреймворком c, но я уверен, что проблема связана с тем, как я выполняю вызовы API. Как это может быть эффективно обработано? Любое предложение высоко ценится.