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

Итак, я следил за учебник по созданию надстройки 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;
  });
}

getAsync, вероятно, от компании bluebird. Возможно, вы используете npm. bluebirdjs.com/docs/api/promise.promisifyall.html

Max Baldwin 09.08.2018 18:02

@MaxBaldwin Не похоже, обещанная bluebird функция не принимает обратный вызов.

Bergi 09.08.2018 18:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
476
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 и вызвать его в каталоге 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);
  });
}

Другие вопросы по теме