首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在mailbox.item.body.getAsync失败时从错误9030中恢复?

如何在mailbox.item.body.getAsync失败时从错误9030中恢复?
EN

Stack Overflow用户
提问于 2019-05-08 02:41:47
回答 2查看 221关注 0票数 2

我正在开发outlook外接程序。但我得到的问题是,有时Office.context.mailbox.item.body.getAsync将失败时,外接程序页面重新加载。最糟糕的是,一旦body.getAsync返回错误"APICallFailedDueToItemChange",body.getAsync将总是失败并返回相同的错误。此错误的详细信息为{名称:"APICallFailedDueToItemChange",消息:“所选项目已更改。”,代码: 9030}

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

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

代码语言:javascript
复制
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也能正常工作,但实际上异常永远不会被清除。

EN

回答 2

Stack Overflow用户

发布于 2019-05-09 21:57:02

请修改你的代码,你并不是真的在用这个承诺做任何事情。

代码语言:javascript
复制
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);
      }
    })
  })
票数 1
EN

Stack Overflow用户

发布于 2020-06-16 17:59:45

我也有同样的问题。

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

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

item.body.getAsync第一次可以工作,但是当附加模块被固定并且我切换到另一个邮件时,它返回一个9030错误。我负责ItemChangedEvent的工作。当项目发生变化时,我还尝试使用window.reload()重新加载整个插件,但仍然存在同样的问题。我所有的包都是最新的。

我在Github & Stackoverflow上看到了一些帖子,但这个问题似乎仍然没有得到解决。有没有其他的解决方案?

下面是我获取正文的代码(当我切换到另一个邮件时,值为null ):

代码语言:javascript
复制
item.body.getAsync("text", (result) => {
    const { value } = result;

    getParsedContact({
      variables: {
        email: contactToParse.email,
        name: contactToParse.displayName,
        body: contactToParse.main
          ? (value || "").replace(/(\r\n|\n|\r)/gm, "\n")
          : "",
      },
    });
  });

另外,我的addHandlerAsync:

代码语言:javascript
复制
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);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56028709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档