首页 > 解决方案 > 如果在之后立即调用 item.saveAsync,Office.context.mailbox.item.addFileAttachmentAsync 不一致

问题描述

以下是在 Script Lab 中重现该问题的代码:

$("#run").click(run);
let callbackCount = 0;
function run() 
{
  for(let i=0; i<10; i++)
  {
    Office.context.mailbox.item.addFileAttachmentAsync("https://ow2.res.office365.com/owalanding/2021.4.9.04/images/outlook-icon.jpg", "test.jpg", () => { console.log(callbackCount++)});
    
    // If the following line is commented, the issue will be resolved. 
    Office.context.mailbox.item.saveAsync((res) => { console.log(res) });
  }
}

上面的代码导致只有两个或三个附件附加到撰写窗格。item.saveAsync如代码中所述,如果未在循环中调用,则此问题已解决。

需要注意的另一点是回调item.saveAsync只运行一次而不是十次。

此问题转载于:

此问题无法在旧 Outlook for Mac 上重现。正如预期的那样,附件在 Mac 的旧 Outlook 上附加了十次。

标签: office-jsoutlook-addinoffice-addinsoutlook-web-addins

解决方案


我们承认这可能是这个确切的代码流中的一个问题,但是,应该在 addFileAttachmentAsync 的回调中调用 saveAsync。在不等待 addFileAttachmentAsync 完成的情况下同步多次调用 saveAsync 会导致状态不一致,因为每个异步调用都以不可预知的顺序完成。我们能否理解您是否有任何特定场景需要此代码流才能工作?


推荐阅读