Итак, я следил за учебник по созданию надстройки 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;
});
}
@MaxBaldwin Не похоже, обещанная bluebird функция не принимает обратный вызов.
Ваша проблема в том, что ваш 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);
});
}
getAsync
, вероятно, от компании bluebird. Возможно, вы используете npm. bluebirdjs.com/docs/api/promise.promisifyall.html