Graph API не возвращает ответ по порядку при вызове в цикле - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь получить присутствие членов Команды (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. Как это может быть эффективно обработано? Любое предложение высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...