【问题标题】:Office.js - get the email body content using getAsync and assign it to a variableOffice.js - 使用 getAsync 获取电子邮件正文内容并将其分配给变量
【发布时间】:2022-12-19 00:33:50
【问题描述】:

我正在尝试使用 body.getAsync() 方法获取 Outlook 中电子邮件的正文内容:

let body = '';
body = Office.context.mailbox.item.body.getAsync(
   "text",
    function (result) {
        if (result.status === Office.AsyncResultStatus.Succeeded) {
            body = result.value;
        }
    }
);
console.log(body);

在这种情况下,console.log(body) 返回未定义。但是,如果我尝试在 getAsync 回调中记录结果:

if (result.status === Office.AsyncResultStatus.Succeeded) {
      body = result.value;
      console.log(body);

}

运行正常,邮件正文内容成功返回。

【问题讨论】:

  • 尝试将 body 变量的声明从 let 更改为 var 并检查结果。

标签: javascript outlook office-js office-addins outlook-web-addins


【解决方案1】:

你必须记住,Javascript 是从上到下同步运行的,除非你使用回调、promises 或 async/await。本质上,body 是未定义的,因为在调用 console.log() 时,Office.context.mailbox.item.body.getAsync() 尚未完成。当getAsync() 完成时,回调函数被调用。此外,getAsync() 返回 void 而不是邮件正文。您需要使用回调来访问正文。

你可以做的是:

let body = '';
Office.context.mailbox.item.body.getAsync(
  "text",
  function (result) {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
      body = result.value;
      doSomething(body)
    }
  }
)

function doSomething(body){
  console.log(body);
}

【讨论】:

  • 这基本上是一个很好的答案,但是(让人恼火的是)“JavaScript 从上到下异步运行”并不是这种情况。 JavaScript 是一种同步的单线程语言。现代 JavaScript 引擎(例如在现代浏览器或 Node.js 中)通过使用父操作系统的异步能力来解决这个问题。这允许在 JavaScript 中使用异步方法。 JS 将启动一个异步方法并立即移动到下一行而不等待它完成(除非以某种方式等待它)。但它确实等待同步方法。
  • @RickKirkham 哎呀我的错字。我的意思是同步的。
【解决方案2】:

使用对象来保留它的值。

    let bodyObject = {};
Office.context.mailbox.item.body.getAsync(
  "text",
  function (result) {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
      bodyObject.body = result.value;
      
    }
  }
)
console.log(bodyObject.body);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2012-11-02
    • 2016-04-30
    • 2019-05-24
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多