javascript - 使用 gmail api javascript 发送 gmail

标签 javascript

我需要一些帮助:

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

当没有调用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);
    }
  })
 });
}

最佳答案

诀窍在于时间延迟。

When I use debugger, everything works, but when debugger is not used, it not working

当您处于 Debug模式时,getAjax 调用能够完成其请求并收到响应。因为在调试时,我们会稍有延迟才能跳到下一行代码。

When getAjax function is not called to get data from local server, then it the program is working and it can send mail

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

很少有解决方法

选项 1:使其同步

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

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

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

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

希望对您有所帮助!

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

相关文章:

javascript - 字符串切片的算法复杂度是多少? (实用,真实世界)

javascript - If 语句 - 电子邮件验证/检查

javascript - Ajax POST 到 PHP - 如何回复?

javascript - Dropzone JS - 分块

javascript - 单击链接时如何选择同级元素?

javascript - 我如何在jquery中获取预约时间(从时间,到时间)

javascript - 为什么我添加到无序列表的 val 在添加后立即消失?

javascript - 使用javascript,将图像名称从文件夹加载到数组

javascript - 这是立即调用的函数表达式吗?

javascript - 通过键盘的 slider 动画不起作用(javascript 和 CSS)