首页 > 解决方案 > 传递给“.run”方法的批处理函数没有返回承诺

问题描述

尽管我确实意识到错误的含义以及它发生的原因,但我认为我有一个超出预期的用例。我Word.run()在另一个承诺中使用,如下所示:

return new Promise((resolve, reject) => {
  window.Word.run(context => {
    // do stuff with context
    resolve(someData);
  });
});

所以,如果我理解正确,这解决了我的承诺,但是.run因为最后没有return context.sync(),所以该方法挂起?还是我弄错了?如果我是对的,我该如何重写上面的示例以保持.run正常工作?

标签: javascriptoffice-js

解决方案


如果您希望在上下文同步后解决您的承诺...

return new Promise((resolve, reject) => {
  window.Word.run(context => {
    // do stuff with context
    return context.sync().then(function() {
      resolve(someData); // promise will resolve after sync resolves
    });
  });
});

如果您不需要在之后解决但只想在将来的某个时间同步上下文,您实际上可以这样做并且它不会等待同步:

return new Promise((resolve, reject) => {
  window.Word.run(context => {
    // do stuff with context
    resolve(someData); // this will resolve the promise
    return context.sync(); // this will actually still happen since the function never returns
  });
});

推荐阅读