Office.context.roamingSettings.saveAsync не работает - PullRequest
4 голосов
/ 10 марта 2019

В моем приложении я попытался удалить атрибуты, сохраненные в офисном хранилище контекста, и перезагрузить их.Мой код выглядит следующим образом:

await Office.context.roamingSettings.remove('clientID');

await Office.context.roamingSettings.saveAsync();

await customAPI.logout();

setTimeout(() => {
  location.reload(true);
}, 1500);

Теперь, если я сохраню в логе значение clientID после saveAsync и перед перезагрузкой, он скажет undefined.Но когда я перезагружаюсь и консольный журнал, он покажет прошлое значение.Есть идеи, почему это происходит?

Это приложение реакции.Я записываю консоль clientID в приложении componentDidMount.

1 Ответ

2 голосов
/ 15 марта 2019

Я очень удивлен, что эта попытка не привела к некоторой ошибке реакции.

Для начала вы не сможете использовать ключевое слово await с методом remove. Этот метод не является async методом для документации здесь:

https://docs.microsoft.com/en-us/javascript/api/outlook_1_1/office.roamingsettings?view=office-js#saveasync-callback-

Теперь - метод saveAsync, как следует из названия, асинхронный. Я сильно сомневаюсь, что он обрабатывается так, как должен обрабатываться обычный асинхронный метод - как обещания. Так что - ниже должно работать на вас.

/* An awaitable remove and save functionality */
removeAsyncWithPromise: function(settingName) {
   return new Promise( (resolve, reject) => {
      Office.context.roamingSettings.remove(settingName);
      Office.context.roamingSettings.saveAsync(result => {
         console.log(result);
         if (result.status === Office.AsyncResultStatus.Failed) {
            return reject(result);
         }

         return resolve(result);
      });
 }); 
}

Вам придется использовать try / catch вокруг него, когда вы звоните, но вы можете использовать await с этим.

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