Javascript 多次调用Office.js并等待完成所有操作

Javascript 多次调用Office.js并等待完成所有操作,javascript,jquery,office365,office-js,outlook-web-addins,Javascript,Jquery,Office365,Office Js,Outlook Web Addins,在office web加载项中,我必须删除多个附件。我尝试在此处使用Office.context.mailbox.item.removeAttachmentAsync文档: } 如何在循环中调用此函数并等待所有调用完成? 注意:async和await是没有选项的,因为它也应该在IE11中工作,我在getAttachmentContentAsync中也有类似的问题。。。 试着用承诺 我有一个函数,返回如下承诺(阅读附件内容): 返回新承诺((解决、拒绝)=>{ 试一试{ const item=O

在office web加载项中,我必须删除多个附件。我尝试在此处使用Office.context.mailbox.item.removeAttachmentAsync文档:

}

如何在循环中调用此函数并等待所有调用完成?
注意:async和await是没有选项的,因为它也应该在IE11中工作,我在getAttachmentContentAsync中也有类似的问题。。。 试着用承诺

我有一个函数,返回如下承诺(阅读附件内容):

返回新承诺((解决、拒绝)=>{
试一试{
const item=Office.context.mailbox.item;
如果(item.attachments.length>0){
const承诺:任意[]=[];
for(设i:number=0;i{
item.getAttachmentContentAsync(
item.attachments[i].id,
{asyncContext:item.attachments[i]},
(结果:Office.AsyncResult)=>{
if(result.status==Office.AsyncResultStatus.successed){
开关(result.value.format){
case Office.MailboxEnums.AttachmentContentFormat.Base64:
//处理文件附件。
决议2({
附件详细信息:result.asyncContext,
附件内容:{
类型:Office.MailboxEnums.AttachmentContentFormat.Base64,
内容:this.getBinaryFileContents(result.value.content),
},
});
打破
case Office.MailboxEnums.AttachmentContentFormat.Eml:
//处理电子邮件项目附件。
决议2({
附件详细信息:result.asyncContext,
附件内容:{
类型:Office.MailboxEnums.AttachmentContentFormat.Eml,
内容:“电子邮件”,
},
});
打破
case Office.MailboxEnums.AttachmentContentFormat.ICalendar:
//手柄,附件。
决议2({
附件详细信息:result.asyncContext,
附件内容:{
类型:Office.MailboxEnums.AttachmentContentFormat.Eml,
内容:“icalender”,
},
});
打破
case Office.MailboxEnums.AttachmentContentFormat.Url:
//处理云连接。
决议2({
附件详细信息:result.asyncContext,
附件内容:{
类型:Office.MailboxEnums.AttachmentContentFormat.Url,
内容:“URL”,
},
});
打破
违约:
决议2({
附件详细信息:result.asyncContext,
附件内容:未定义,
});
打破
}
}否则{
拒绝2({
数据:未定义,
错误:result.error.message,
});
}
},
);
}),
);
}
所有(承诺)
。然后((结果)=>{
控制台日志(结果);
决心({
数据:结果,
错误:“”,
});
})
.catch((e)=>{
拒绝({
数据:未定义,
错误:e,
});
});
}否则{
决心({
数据:[],
错误:“”,
});
}
}捕获(错误){
拒绝({
数据:未定义,
错误:错误,
});
}
});

由于removeAttachmentAsync API的异步性质,您需要使用async/await来确保API调用完成。如果在删除每个附件后需要执行某些操作,可以将此代码添加到回调中,该回调将在API完成后调用

另一种可能的解决方法是使用Polyfill或在IE11中提供Promissions/async/await的库。IE中的承诺选项在中讨论

function removeAttachment(attachmentId) {

Office.context.mailbox.item.removeAttachmentAsync(
    attachmentId,
    { asyncContext: null },
    function (asyncResult) {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            write(asyncResult.error.message);
        } else {
            write('Removed attachment with the ID: ' + asyncResult.value);
        }
    });