Javascript 获取异步变量返回空

Javascript 获取异步变量返回空,javascript,node.js,outlook-web-addins,yeoman-generator,Javascript,Node.js,Outlook Web Addins,Yeoman Generator,我正在尝试为outlook windows应用程序创建外接程序。 下面的代码应该将电子邮件正文复制到剪贴板,但它不会这样做。 我需要按两次运行按钮才能复制内容,但我需要从第一次复制内容! 我的代码有什么问题 var messageBody = ""; export async function run() { Office.context.mailbox.item.body.getAsync( Office.CoercionType.Text,

我正在尝试为outlook windows应用程序创建外接程序。 下面的代码应该将电子邮件正文复制到剪贴板,但它不会这样做。 我需要按两次运行按钮才能复制内容,但我需要从第一次复制内容! 我的代码有什么问题

var messageBody = "";
export async function run() {
    Office.context.mailbox.item.body.getAsync(
        Office.CoercionType.Text,
        function (asyncResult) {
            if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) {
                messageBody = asyncResult.error;
            } else {
                messageBody = asyncResult.value;
            }
        });

    copyToClipboard(messageBody)
}

function copyToClipboard(text) {
    var copyhelper = document.createElement("input");
    copyhelper.className = 'copyhelper'
    document.body.appendChild(copyhelper);
    copyhelper.value = text;
    copyhelper.select();
    document.execCommand("copy");
    document.body.removeChild(copyhelper);
}

您可以将
copyToClipboard(messageBody)
放入
函数(asyncResults){…}
中,我建议您阅读以下内容:因为异步计时的问题已经在这里讨论过了。基本上,您的函数
run()
在检索异步值之前返回,因此您尝试在函数中包含值之前使用
messageBody
。您将需要使用回调、承诺或事件来传回异步结果,或者您可以在检索到异步结果的回调中使用异步值。您可以将
copyToClipboard(messageBody)
放入
函数(asyncResults){…}
我建议阅读以下内容:因为异步计时的问题已经在这里讨论过了。基本上,您的函数
run()
在检索异步值之前返回,因此您尝试在函数中包含值之前使用
messageBody
。您将需要使用回调、承诺或事件返回异步结果,或者您可以在检索异步结果的回调中使用异步值。