Оберните body.getAsync () внутри функции синхронизации

1

Поэтому я следил за учебником по созданию надстройки Outlook. Однако демонстрация не отображает 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;
  });
}
  • 0
    Вероятно, getAsync происходит от Bluebird. Используемый вами npm, вероятно, обернут в него. bluebirdjs.com/docs/api/promise.promisifyall.html
  • 0
    @MaxBaldwin Не похоже, что обещанная bluebird функция не будет принимать обратный вызов.
Теги:
office-js
outlook-web-addins

1 ответ

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 полностью удалить 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);
  });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню