Office js mailbox.item.body.getAsync失败时,如何从错误9030中恢复?

Office js mailbox.item.body.getAsync失败时,如何从错误9030中恢复?,office-js,outlook-web-addins,outlook-for-mac,Office Js,Outlook Web Addins,Outlook For Mac,我正在处理outlook加载项。但我遇到了这样一个问题:当加载项页面重新加载时,Office.context.mailbox.item.body.getAsync有时会失败。最糟糕的是,一旦body.getAsync返回错误“APICallFailedDueToItemChange”,body.getAsync将始终失败并出现相同的错误。 此错误的详细信息是{name:“APICallFailedDueToItemChange”,消息:“所选项目已更改”,代码:9030} 我试图调用getAsy

我正在处理outlook加载项。但我遇到了这样一个问题:当加载项页面重新加载时,Office.context.mailbox.item.body.getAsync有时会失败。最糟糕的是,一旦body.getAsync返回错误“APICallFailedDueToItemChange”,body.getAsync将始终失败并出现相同的错误。 此错误的详细信息是{name:“APICallFailedDueToItemChange”,消息:“所选项目已更改”,代码:9030}

我试图调用getAsync,甚至重新加载整个窗口以使加载项重新启动,但错误将持续发生。唯一的办法是切换到另一封电子邮件

复制步骤: 1.创建任何尝试获取电子邮件正文的outlook加载项 2.加载加载项后,重新加载加载项窗口 3.一旦发生9030错误,控制台中的代码将始终触发相同的错误,直到我切换到另一封电子邮件

await new Promise((resolve, reject) => {
    window.Office.context.mailbox.item.body.getAsync('text', (result) => {
      if (result.status === 'succeeded') {
        console.log(result.value)
        return resolve(result.value); // updated as suggested by Mavi Domates
      } else {
        console.error(result.error)
        return reject(result.error);
      }
    })
  })

我希望getAsync可以正常工作,即使上一次回调失败,但实际的异常将永远不会被清除。

请修改您的代码,您并没有真正按照这个承诺做任何事情

await new Promise((resolve, reject) => {
    return window.Office.context.mailbox.item.body.getAsync('text', (result) => {
      if (result.status === 'succeeded') {
        console.log(result.value);
        return resolve(result.value);
      } else {
        console.error(result.error);
        return reject(result.error);
      }
    })
  })
我也有同样的问题

我正在开发Outlook加载项,我需要获取我阅读的每封电子邮件的电子邮件正文

在Windows(OWA和应用程序)中一切正常。它也适用于Safari Mac OWA,但不适用于Mac的Outlook应用程序

item.body.getAsync第一次工作,但是当外接程序被固定并且我切换到另一个邮件时,它返回9030错误。我处理这个项目。我还尝试在项目更改时使用window.reload()完全重新加载外接程序,但问题相同。我所有的包裹都是最新的

我在Github&Stackoverflow上看到了一些帖子,但问题似乎仍未解决。有没有其他解决办法

以下是获取正文的代码(当我切换到其他邮件时,值为null):

此外,我的addHandlerAsync:

const reloadInterface = () => {
  if (Office.context.mailbox.item != null) {
    console.log("New item detected. Reloading interface...");
    location.reload(true); // I try here to reload all the add-in when switching to another email
  } else {
    console.log("No email is selected.");
    Office.context.mailbox.removeHandlerAsync(
      Office.EventType.ItemChanged,
      function() {
        console.log("Item Change event unregistered.");
        Office.context.mailbox.addHandlerAsync(
          Office.EventType.ItemChanged,
          reloadInterface
        );
        console.log("Item Change event re-registered.");
      }
    );
  }
};

Office.initialize = () => {
  isOfficeInitialized = true;

  Office.context.mailbox.addHandlerAsync(
    Office.EventType.ItemChanged,
    reloadInterface
  );

  render(App);
};

你在哪个客户机上测试这个?Windows Win32桌面?Outlook Web Access?等等。还有什么具体版本?以及如何重新加载加载项窗口?如果您使用的是SupportSping功能。您还需要为itemChanged事件实现addHandlerAsync。否则,对该项调用API将导致该错误。@OutlookAdd insTeam MSFT我的客户端是MacOS 10.14.4 outlook 16.24。为了重现此窗口,我右键单击外接程序并选择“重新加载”来重新加载页面。这是随机发生的,但大约有10次。我还添加了“为什么切换到其他电子邮件可以恢复此问题”的itemChanged事件。@OutlookAdd insTeam MSFT我在中创建了一个测试项目。你能帮我看看吗?谢谢,这个问题与我想锁定任务窗格有关。在我更改清单之前,我尝试重新加载窗口大约20多次,没有问题。使用addHandlerAsync相关逻辑后,如果我锁定任务窗格并切换电子邮件,则右键单击重新加载。错误被复制。谢谢回复。是的,在我真正的项目代码中,我决定并拒绝了它。我在这里粘贴的代码是为了在控制台中进行测试。不知怎的,你的建议让我明白了
const reloadInterface = () => {
  if (Office.context.mailbox.item != null) {
    console.log("New item detected. Reloading interface...");
    location.reload(true); // I try here to reload all the add-in when switching to another email
  } else {
    console.log("No email is selected.");
    Office.context.mailbox.removeHandlerAsync(
      Office.EventType.ItemChanged,
      function() {
        console.log("Item Change event unregistered.");
        Office.context.mailbox.addHandlerAsync(
          Office.EventType.ItemChanged,
          reloadInterface
        );
        console.log("Item Change event re-registered.");
      }
    );
  }
};

Office.initialize = () => {
  isOfficeInitialized = true;

  Office.context.mailbox.addHandlerAsync(
    Office.EventType.ItemChanged,
    reloadInterface
  );

  render(App);
};