Office.context.roamingSettings.saveAsync不起作用

时间:2019-03-10 08:50:14

标签: office-js

在我的应用程序中,我尝试删除保存到Office上下文存储并重新加载的属性。我的代码如下:

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

await Office.context.roamingSettings.saveAsync();

await customAPI.logout();

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

现在在这里,如果我在saveAsync之后和重新加载之前控制台记录clientID的值,它将显示undefined。但是,当我重新加载和控制台日志时,它将显示过去的值。知道为什么会这样吗?

这是一个React应用。我正在控制台中记录应用程序clientID函数中的componentDidMount

1 个答案:

答案 0 :(得分:2)

我对此尝试并没有导致某种反应错误感到非常惊讶。

首先,您不能将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。