office-js - 如果在之后立即调用 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 v16.52 (21080101)
- macOS 大苏尔 11.5.1
此问题无法在旧 Outlook for Mac 上重现。正如预期的那样,附件在 Mac 的旧 Outlook 上附加了十次。
解决方案
我们承认这可能是这个确切的代码流中的一个问题,但是,应该在 addFileAttachmentAsync 的回调中调用 saveAsync。在不等待 addFileAttachmentAsync 完成的情况下同步多次调用 saveAsync 会导致状态不一致,因为每个异步调用都以不可预知的顺序完成。我们能否理解您是否有任何特定场景需要此代码流才能工作?