我需要一些帮助:

当我使用调试器时,一切正常,但是当不使用调试器时,它将无法正常工作。

如果未调用getAjax函数从本地服务器获取数据,则表明该程序正在运行,并且可以发送邮件

function sendMessage(headers_obj, message, callback) {
  var pGmail = $('#compose-to').val();
  getAjax(pGmail).then(result => {
  var email = '';
  message = encryptText(result, message);
  for (var header in headers_obj) {
    email += header += ": " + headers_obj[header] + "\r\n";
  }
  email += "\r\n" + message;
  alert(email);
  if(email!=null|| email!=''){
    var mail = encodeBase64(email);
    var sendRequest = gapi.client.gmail.users.messages.send({
      'userId': 'me',
      'resource': {
         'raw': mail
       }
    })
    sendRequest.execute(callback)
  }
})
}
 function getAjax(pGmail) {
   return new Promise((resolve) => {
    $.ajax({
     url: 'http://localhost:7777/' +
     '?pmail=' + pGmail + '&method=where', success: function (result) {
      return resolve(result);
    }
  })
 });
}

最佳答案

技巧在于时间延迟。


  当我使用调试器时,一切正常,但是当不使用调试器时,它不起作用


在调试模式下,getAjax调用能够完成其请求,并且响应已到达。因为在调试时,我们有一点时间延迟才能进入下一行代码。


  如果未调用getAjax函数从本地服务器获取数据,则表明程序正在运行并且可以发送邮件


显然,这里没有时间延迟,因为您没有调用getAjax函数。

很少的解决方法

选项1:使其同步

即使getAjax是异步调用,我们也可以在getAjax调用的响应中连接电子邮件发送代码,从而使其同步,

选项2:引入getAjax和电子邮件发送代码之间的时间延迟。

请注意,在这种方法中,如果getAjax调用在该延迟时间内没有响应,则该延迟可能会高于或小于getAjax函数所花费的时间,并且在某些情况下可能会失败。

选择最适合您的方案的选项。

希望能帮助到你!

关于javascript - 使用gmail API JavaScript发送gmail,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47160565/

10-09 18:20