我需要一些帮助:
当我使用调试器时,一切正常,但是当不使用调试器时,它将无法正常工作。
如果未调用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/