Понимание SP.clientContext.executeQueryAsync и порядка, в котором он извлекает данные - PullRequest
0 голосов
/ 10 мая 2018

У меня есть функция, которая просматривает список адресов электронной почты через запятую. В цикле мы передаем некоторые параметры (включая адрес электронной почты) в функцию 'getUserProperties', которая использует SP.clientContext.

Я сократил код в функции до:

getUserProperties = function (targetUser, userCount, parentCtrl) {
var deferred = $.Deferred();
var clientContext = new SP.ClientContext.get_current();
var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);
var userProfileProperties;
var profilePropertyNames = ["PictureURL", "PreferredName", "SPS-JobTitle", "Department", "WorkPhone", "WorkEmail", "PersonalSpace"];
var userProfilePropertiesForUser = new SP.UserProfiles.UserProfilePropertiesForUser(
    clientContext,
    targetUser,
    profilePropertyNames);
userProfileProperties = peopleManager.getUserProfilePropertiesFor(userProfilePropertiesForUser);

console.log(userProfileProperties);
console.log(userProfilePropertiesForUser);

clientContext.load(userProfilePropertiesForUser);
clientContext.executeQueryAsync(function (sender, args) {

    console.log(userProfileProperties);

},function (sender, args) {
   deferred.reject(null);
});

return deferred.promise();

}

Моя проблема с точки зрения понимания происходящего состоит в том, что первый console.log (userProfileProperties); отображает данные, запрошенные в журнале консоли, в том же порядке, что и в предыдущей функции цикла.

Это то же самое, что и console.log (userProfilePropertiesForUser); вызов.

Однако, после вызова clientContext.load и clientContext.executeQueryAsync и затем console.log (userProfileProperties); отображается во второй раз порядок данных отличается от порядка в цикле от предыдущей функции.

Таким образом, я хотел бы знать, почему данные отличаются от данных, передаваемых в функцию, так как clientContext.load и clientContext.executeQueryAsync влияют на это.

Большое спасибо

1 Ответ

0 голосов
/ 11 мая 2018

Первый журнал просто выводит объявление объекта JavaScript, профиль пользователя еще не заполняется, пока вы не вызовете clientContext.load и clientContext.executeQueryAsync.

Проверьте скриншоты ниже.

enter image description here

enter image description here

одна тема для вашей справки

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