Javascript 如何在不同的上下文中使用Word.RangeCollection?

Javascript 如何在不同的上下文中使用Word.RangeCollection?,javascript,promise,ms-word,office365,office-js,Javascript,Promise,Ms Word,Office365,Office Js,假设我搜索一个单词并跟踪返回的单词。RangeCollection,如何在另一个word.run上下文中使用这些范围?我四处搜索,尝试了许多不同的方法来实现这个目标,我得到的最接近的结果是 var searchResults; function search(term){//this works as expected Word.run(function (context) { searchResults = context.document.body.search(t

假设我搜索一个单词并跟踪返回的单词。RangeCollection,如何在另一个word.run上下文中使用这些范围?我四处搜索,尝试了许多不同的方法来实现这个目标,我得到的最接近的结果是

var searchResults;

function search(term){//this works as expected
    Word.run(function (context) {
        searchResults = context.document.body.search(term, { ignorePunct: true });
        searchResults.track();

        context.load(searchResults, ["font"]);

        return context.sync()
        .then(function () {
            for (var i = 0; i < searchResults.items.length; i++) {
                searchResults.items[i].font.highlightColor = "#FFFF00";
            }
        })
        .then(context.sync);
    }).catch(function (error) {
        console.log("Error: " + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
    });
}

function clearSearch(){
    Word.run(searchResults, (context) => {//pass in Word.RangeCollection so its .context can be reused
        searchResults.load("font");
        return context.sync()
        .then(function(){
            for (var i = 0; i < searchResults.items.length; i++) {//!!!Cant access items here
                searchResults.items[i].font.highlightColor = null;
            }
            //searchResults.untrack();
        })
        .then(context.sync);
    }).catch(function (error) {
        console.log("Error: " + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
    });
}
var搜索结果;
函数搜索(term){//这工作正常
运行(函数(上下文){
searchResults=context.document.body.search(术语,{ignorePunct:true});
searchResults.track();
加载(搜索结果,[“字体]);
返回context.sync()
.然后(函数(){
对于(var i=0;i{//传入Word.RangeCollection,以便可以重用其.context
searchResults.load(“字体”);
返回context.sync()
.然后(函数(){
对于(var i=0;i
运行search(“anywordinmydoc”)可以正常工作,但在之后运行clearSearch()会告诉我需要加载属性项。据我所知,对RangeCollection调用.load(“font”)应该加载items[]中所有Range对象的font属性,因此searchResults.items应该被加载并可访问

我似乎无法加载searchResults.items,不确定我做错了什么,但我需要能够跟踪并在多个函数中使用Word.RangeCollection。

Word.run()
返回Promise,它本身可以从
search()
返回。将该承诺解析为
searchResults
,从而使这两个函数调用与传递给
clearSearch()
searchResults
可链接(via.then),应该不会太难。