【发布时间】:2018-02-05 22:12:20
【问题描述】:
不确定我是否正确执行此操作。所以我在我的 nodejs 脚本中使用异步等待,我从电子邮件帐户获取电子邮件并将电子邮件和收件人保存到数据库中。我遇到的问题是他们的收件人没有保存最后一封电子邮件。不知道我在这里做错了什么。这是我的代码。
function saveEmailRecipients(message, pool, emailId){
return new Promise(function(resolve, reject){
var saveCC = async function(){
//Store cc
if(message.cc != undefined){
for (var k in message.cc) {
let cc = message.cc[k];
var request = pool.request();
request.input('email_id', sql.Int, emailId);
request.input('email_address', sql.VarChar, cc.address );
request.input('email_address_name', sql.VarChar, cc.name);
request.input('created_by', sql.VarChar, 'system');
request.input('recipient_type', sql.VarChar, 'CC');
await request.query('INSERT INTO email_recipient_temp(email_id, email_address, email_address_name, created_by, recipient_type) values (@email_id, @email_address, @email_address_name, @created_by, @recipient_type)');
}
}
//Store to
if(message.to != undefined){
for (var j in message.to) {
let to = message.to[j];
var request = pool.request();
request.input('email_id', sql.Int, emailId);
request.input('email_address', sql.VarChar, to.address );
request.input('email_address_name', sql.VarChar, to.name);
request.input('created_by', sql.VarChar, 'system');
request.input('recipient_type', sql.VarChar, 'TO');
await request.query('INSERT INTO email_recipient_temp(email_id, email_address, email_address_name, created_by, recipient_type) values (@email_id, @email_address, @email_address_name, @created_by, @recipient_type)');
}
}
}
var recipientResults = saveCC();
recipientResults
.then(function(){
resolve();
})
.catch(function(err){
reject(err)
})
});
};
async function main() {
try
{
let pool = (await sql.connect(config));
var messages = (await getEmailsFromEmailServer());
for (var messageIndex in messages) {
//Save email
var emailId = (await saveEmail(pool, messages[messageIndex]));
(await saveEmailRecipients (messages[messageIndex], pool, emailId));
//(await saveAttachments(messages[messageIndex], emailId));
}
client.quit();
process.exit();
}
catch(err){
console.log(err);
client.quit();
process.exit();
}
};
main();
我省略了一些函数,因此我们可以专注于 saveEmailRecipient。我怀疑我在那里是不对的。我有两个循环,每个循环都在向数据库中插入。我知道request.query 会返回一个承诺。我不确定我是否需要将整个事情包装在另一个异步函数中,或者我应该在这里使用 promise.all。
【问题讨论】:
-
所以 saveEmailRecipients 需要返回一个承诺,因为我在那里有一个 await 关键字。在 saveEmailRecipients 函数中,我是否正确解决了它?
标签: javascript node.js async-await es6-promise