为了账号安全,请及时绑定邮箱和手机立即绑定

在 outlook JS 加载项中调用 REST API 时确认事件完成

在 outlook JS 加载项中调用 REST API 时确认事件完成

qq_遁去的一_1 2023-03-03 10:47:02
我正在构建一个 JS 加载项,它只需在单击功能区中的按钮时将带有添加注释“STOP”的消息转发到定义的地址。为了转发,我通过请求调用 REST API POST。event.completed()在函数末尾添加(event)作为参数时,getCallbackTokenAsync 根本不运行。相反,如果没有它,加载项会正确转发消息,但信息栏不会消失并且脚本会继续循环运行:表示脚本正在运行的信息栏:https ://i.stack.imgur.com/zGa2K.pngevent.completed()关于调用 REST API 时我应该如何正确处理的任何想法?// the function sendAsStops is called directly from the manifest filefunction sendAsStops(event) {  console.log("Initialising STOP command.");  var restHost = Office.context.mailbox.restUrl;  var itemId = getItemRestId();  console.log(itemId);  Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {    if (result.status === Office.AsyncResultStatus.Succeeded) {      console.log('Sending email...');     var accessToken = result.value;      console.log(result);      var getMessageUrl = restHost + '/v2.0/me/messages/' + itemId + '/forward';        $.ajax({          url: getMessageUrl,          type: 'post',          headers: { 'Authorization': 'Bearer ' + accessToken },          contentType: 'application/json',          dataType: 'json',          data: JSON.stringify({            'Comment': 'STOP',            'ToRecipients': [{'EmailAddress': { 'Address': 'name@address.com' }}],          })         }).done(function() {           console.log("Stop successfully forwarded.");         }).fail(function(error) {           console.log("Failed to send");        });    } else {      console.log("Unable to proceed. Ref: " + result.status);      return false;    }  });  event.completed();}function getItemRestId() {  console.log("Getting item ID...");  if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {    console.log("ID ready to use.");    return Office.context.mailbox.item.itemId;  } else {    console.log('Converting ID...');    return Office.context.mailbox.convertToRestId(      Office.context.mailbox.item.itemId,      Office.MailboxEnums.RestVersion.v2_0    );  }}
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

event.completed()必须在加载项执行结束时调用。调用event.completed()会终止您的加载项,因此任何异步调用(例如getCallbackTokenAsync本例中的回调)都会自动终止并清除。因此,您看不到加载项转发消息。


event.completed()在您的整个加载项执行完成后调用。就像是:


       $.ajax({

          url: getMessageUrl,

          type: 'post',

          headers: { 'Authorization': 'Bearer ' + accessToken },

          contentType: 'application/json',

          dataType: 'json',

          data: JSON.stringify({

            'Comment': 'STOP',

            'ToRecipients': [{'EmailAddress': { 'Address': 'name@address.com' }}],

          })

         }).done(function() {

           console.log("Stop successfully forwarded.");

           event.completed();

         }).fail(function(error) {

           console.log("Failed to send");

           event.completed();

        });


查看完整回答
反对 回复 2023-03-03
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信