javascript - promise 运行的保证顺序,Word API JS

标签 javascript ms-word promise ms-office office-js

我正在开发一个 Word 加载项,需要用从 API 获取的值替换整个文档中的大量代码。我是 promises 的新手,并且在让替换顺序运行时遇到问题,因此位置不会被打乱导致错过替换。到目前为止,我最好的尝试是:

function merge(documentFieldKeys) {
    if (documentFieldKeys.length > 0)
        Word.run(function(context) {
            var key = documentFieldKeys.shift();
            var results = context.document.body.search(key.Code, { matchWholeWord: false, matchCase: false });
            context.load(results);
            return context.sync().then(function() {
                    if (results.items.length > 0 && key.Value === "") {
                        missingFields.push(key.Description);
                    } else {
                        for (var i = 0; i < results.items.length; i++) {
                            results.items[i].insertText(key.Value, "replace");
                        }
                    }
                })
                .then(context.sync).then(merge(documentFieldKeys));
        });
}

根据我对 promises 的理解,它应该处理第一个项目,然后在完成后通过短名单进行另一个替换。但是,它们的顺序看似随机。知道哪里出了问题吗?

最佳答案

问题是 .then(merge(documentFieldKeys))。这意味着您正在立即调用合并功能。你想要做的是:

.then(函数() { 返回合并(documentFieldKeys); }) .then(上下文同步);

更新:

注意:第二个.then(context.sync)是可选的,你实际上并不需要它,因为Word.run会在最后刷新队列反正。但我发现显示它更清晰。

另外,关于它的值(value):我写了一本关于 Office.js 的书,“Building Office Add-ins using Office.js”。在其中,我包含了一篇关于 Promises 的长入门读物,以及 TypeScript 和 async/await,这使得使用 Promises 变得更加容易。该书的电子书形式可在 https://leanpub.com/buildingofficeaddins 获得。 , 与 all profits to charity .

关于javascript - promise 运行的保证顺序,Word API JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50883874/

相关文章:

javascript - Gulp 和依赖关系重建

powershell - 在单词中为表格的特定单元格着色

javascript - promise 不等待解决

Java XWPF,设置段落悬挂缩进

r - bookdown - 使用 word_document2 时如何获得图上方的图标题和图下方的图注释

javascript - 在 Promise 链的中间传递一个额外的参数

javascript - Promise 可以按顺序加载多个 url 吗?

javascript - datatable column.search() 没有使用过滤我的表

javascript - 试图让 HTML 表格与 document.write 一起出现在 Javascript 中

javascript - 在 React hyperscript 中使用 html 实体