将body.getAsync()包装在同步函数中

时间:2018-08-09 10:00:31

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

所以我正在关注tutorial to build an Outlook Add-in。但是,该演示不显示消息的body

我还从文档中学到了可以调用getAsync来访问正文的功能,但是它不起作用。我需要在这里使用async await吗?

代码如下:

function loadProps() {
  $("#attachments").html(buildAttachmentsString(item.attachments));
  $("#cc").html(buildEmailAddressesString(item.cc));
  $("#conversationId").text(item.conversationId);
  $("#from").html(buildEmailAddressString(item.from));
  $("#internetMessageId").text(item.internetMessageId);
  $("#normalizedSubject").text(item.normalizedSubject);
  $("#sender").html(buildEmailAddressString(item.sender));
  $("#subject").text(item.subject);
  $("#to").html(buildEmailAddressesString(item.to));
  $("#body").text(buildEmailBodyString()); //async function
}

function buildEmailBodyString() {
  Office.context.mailbox.item.body.getAsync(Office.CoercionType.Text, function callback(resText) {
    return resText.value;
  });
}

1 个答案:

答案 0 :(得分:1)

您的问题是您的buildEmailBodyString会触发getAsync并立即存在。它不从函数返回restText.value,因为该函数已经存在。

function buildEmailBodyString() {
  // 1. Fires function
  Office.context.mailbox.item.body.getAsync(Office.CoercionType.Text, function callback(resText) {
    // 3. returns a value to nothing
    return resText.value;
  });
  // 2. Exits function
}

这里的一种解决方案是在回调中设置$("#body")

function buildEmailBodyString() {
  Office.context.mailbox.item.body.getAsync(Office.CoercionType.Text, function callback(resText) {
    $("#body").text(resText.value);
  });
}

您也可以完全丢弃buildEmailBodyString并在loadProps目录中调用它。这样可以简化代码,从而使以后的工作更轻松:

function loadProps() {
  $("#attachments").html(buildAttachmentsString(item.attachments));
  $("#cc").html(buildEmailAddressesString(item.cc));
  $("#conversationId").text(item.conversationId);
  $("#from").html(buildEmailAddressString(item.from));
  $("#internetMessageId").text(item.internetMessageId);
  $("#normalizedSubject").text(item.normalizedSubject);
  $("#sender").html(buildEmailAddressString(item.sender));
  $("#subject").text(item.subject);
  $("#to").html(buildEmailAddressesString(item.to));

  // Retrieve Email Body
  Office.context.mailbox.item.body.getAsync(Office.CoercionType.Text, function callback(resText) {
    $("#body").text(resText.value);
  });
}