我需要一些帮助:
当我使用调试器时,一切正常,但当不使用调试器时,它就不工作了。
当没有调用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);
}
})
});
}发布于 2017-11-08 20:03:37
诀窍在于时间延迟。
当我使用调试器时,一切正常,但当不使用调试器时,它就不工作了
当您处于调试模式时,getAjax调用能够完成其请求并到达响应。因为在调试时,会有一个很小的时间延迟,让我们跳到下一行代码。
当未调用getAjax函数从本地服务器获取数据时,则程序正在工作,可以发送邮件
显然,这里没有必要延迟时间,因为您没有调用getAjax函数。
较少的解决方案接近
选项1:使其同步
即使getAjax是异步调用,我们也可以在getAjax调用的响应中连接电子邮件发送代码,从而使其同步。
选项2:在getAjax和电子邮件发送代码之间引入时间延迟。
请注意,在这种方法中,时间延迟可能高于或低于getAjax函数所用的时间,并且在某些情况下,如果getAjax调用在该时间延迟内没有响应,它可能会失败。
选择最适合您的场景的选项。
希望它能帮上忙!
发布于 2017-11-09 23:42:14
var mysql = require('mysql');
var http = require("http");
var url = require("url");
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234",
database: 'publickeyserver'
});
con.connect(function (err) {
if (err) throw err;
console.log("Connected!");
});
http.createServer(function (req, res) {
var query = url.parse(req.url, true).query;
switch (query.method) {
case "insert":
var pkey = new Buffer(query.publickey,
'base64').toString('ascii');
insertKey(query.pmail, pkey, res);
break;
case "where":
getKey(query.pmail, res);
break;
default:
console.log("Error");
}
}).listen(7777);
function insertKey(pmail, publickey, res) {
var value = [[pmail, publickey]];
var sql = "INSERT INTO publickey (GmailId, PublicKey) VALUES ?";
con.query(sql, [value], function (err, result) {
if (err) throw err;
console.log("success");
res.write('success');
res.end();
});
}
function getKey(pmail, res) {
console.log(pmail);
var sql = 'SELECT PublicKey FROM publickey WHERE GmailId = ?';
con.query(sql, [pmail], function (err, result) {
if (err) throw err;
res.writeHead(200, { "Content-Type": "text/plain" });
res.end(result[0]['PublicKey']);
console.log(result[0]['PublicKey']);
});
}以下是我的服务器代码,我使用nodejs
https://stackoverflow.com/questions/47160565
复制相似问题