Office.js - 使用 getAsync 获取电子邮件正文内容并将其分配给变量

问题描述 投票:0回答:3

我正在尝试使用

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);

}

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

javascript outlook office-js office-addins outlook-web-addins
3个回答
1
投票

你必须记住,Javascript 从上到下同步运行,除非你使用回调、promise 或 async/await。本质上,

body
是未定义的,因为当调用
Office.context.mailbox.item.body.getAsync()
时,
console.log()
尚未完成。当
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);
}

0
投票

使用对象来保留其值。

    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);

0
投票

在脚本实验室中,juicy-g 的答案对我有用 - Goutam Kumar 的第二次运行也有效

出于测试目的,我发现 Goutam 的答案更简单。

请参阅底部的代码以了解我的脚本实验室插件片段测试。

但是,它不会在第一次从 Script Lab 加载项运行时将正文记录到控制台,但会在第二次按下“运行”按钮时将正文记录到控制台。

当我使用 juicy-g 的版本时,它会在按下第一个按钮时返回正文。

我的脚本实验室代码片段使用粗略的 Goutam 方法

$("#run").on("click", run);

let bodyObject = {body: ""};

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

  console.log(bodyObject.body);
}

我的脚本实验室代码片段使用粗略的 juicy-g 方法

$("#run").on("click", run);

function run() {
  Office.context.mailbox.item.body.getAsync(
    "text",
    function (bodyResult) {
      // await sleep(1000);
      if (bodyResult.status === Office.AsyncResultStatus.Succeeded) {
        showBody(bodyResult.value);
      }
    });
}

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

这花费了我一些时间来学习,所以我希望这有助于为其他人节省时间。

© www.soinside.com 2019 - 2024. All rights reserved.