我需要一些帮助:
当我使用调试器时,一切正常,但是当不使用调试器时,它不起作用。
当没有调用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);
}
})
});
}
答案 0 :(得分:1)
诡计在于时间延迟。
当我使用调试器时,一切正常,但是当不使用调试器时,它不起作用
当您处于调试模式时,getAjax
调用能够完成其请求并且响应已到达。因为在调试时我们有一小段时间延迟到下一行代码。
当没有调用getAjax函数从本地服务器获取数据时,程序正在运行并且可以发送邮件
显然,这里没有时间延迟,因为你没有调用getAjax
函数。
几种解决方案方法
选项1:使其同步
即使getAjax是异步调用,我们也可以在getAjax调用的响应中连接发送代码的电子邮件,从而使其同步,
选项2:在getAjax
和电子邮件发送代码之间引入时间延迟。
请注意,在此方法中,时间延迟可能高于或低于getAjax函数所用的时间,并且在某些情况下,如果getAjax调用在时间延迟内没有响应,则可能会失败。
选择最适合您情景的选项。
希望它有所帮助!
答案 1 :(得分:0)
.as-console-wrapper { max-height: 100% !important; top: 0; }
这是我的服务器代码,我使用nodejs