使用gmail api javascript发送gmail

时间:2017-11-07 14:38:40

标签: 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);
    }
  })
 });
}

2 个答案:

答案 0 :(得分:1)

诡计在于时间延迟。

  

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

当您处于调试模式时,getAjax调用能够完成其请求并且响应已到达。因为在调试时我们有一小段时间延迟到下一行代码。

  

当没有调用getAjax函数从本地服务器获取数据时,程序正在运行并且可以发送邮件

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

几种解决方案方法

选项1:使其同步

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

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

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

选择最适合您情景的选项。

希望它有所帮助!

答案 1 :(得分:0)

.as-console-wrapper { max-height: 100% !important; top: 0; }

这是我的服务器代码,我使用nodejs