如何从getAllInternetHeadersAsync获取返回值?

问题描述

我创建了一个Office加载项,我想知道如何使用getAllInternetHeadersAsync获取Internet标头?我有以下代码,它将标头发送到控制台:

SELECT o.OpportunityID,n.NotesDate,n.NotesID
FROM Opportunity AS o
LEFT JOIN tblNotes AS n 
    ON  n.OpportunityID = o.OpportunityID
    AND n.NotesDate = (
        SELECT MAX(n1.NotesDate)
        FROM tblNotes n1
        WHERE n1.OpportunityID = o.OpportunityID
    )
ORDER BY o.OpportunityID;

但是,标头似乎并没有被永久设置。第一个console.log显示标题的正确值。但是,最后一个console.log显示标题已恢复为空。如何设置标头,以便在getAllInternetHeadersAsync函数之后仍可以看到标头?

谢谢!

解决方法

仔细查看您的控制台输出。您应该发现,在回调函数内部的console.log("headers = " + headers)输出之前,在代码末尾显示console.log(headers)输出。 像许多Office API函数一样,

getAllInternetHeadersAsync()是一个异步函数,顾名思义。当您调用该函数时,它会在获取标题之前立即返回。因此,函数调用之后的所有代码都将立即执行。但是您还没有标题!

一小段时间后,该函数获取标头并调用您的回调函数。现在您可以访问标题了。但是将这些标头存储在全局变量中并没有任何好处,因为您的其他代码不知道它们何时准备就绪。

您需要做的是:您需要查看标头的任何代码都应该位于回调函数内部,或者位于您从回调代码调用的另一个函数中。这样,您的代码将具有可用的标头。

这是处理名称中带有Async的每个Office API函数的方法。

正如@JaromandaX在评论中指出的那样,您可以使用Promiseasync / await,但是您必须自己创建Promise作为Office API不会为您执行此操作-它仅使用回调。同样使用async / await会将您限制在支持它的现代浏览器中,或者如果需要支持Internet Explorer,则要求您使用编译器将代码转换为ES5兼容代码。

对于Office API,仅坚持使用xyzAsync函数提供的回调系统,并且仅访问该回调内部的asyncResult.value或您从该回调内部调用的另一个函数中,这是最简单的

要获取更多阅读信息,可以在网络上搜索asynchronous javascript来找到许多文章,对其进行详细说明。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...