0

我是JavaScript新手。我有使用sendgrid发送电子邮件的简单模块:如何在javascript中使模块异步

// using SendGrid's v3 Node.js Library 
// https://github.com/sendgrid/sendgrid-nodejs 
var helper = require('sendgrid').mail; 
var fromEmail = new helper.Email('[email protected]'); 
var toEmail = new helper.Email('[email protected]'); 
var subject = 'Sending with SendGrid is Fun'; 
var content = new helper.Content('text/plain', 'and easy to do anywhere, even with Node.js'); 


var mail = new helper.Mail(fromEmail, subject, toEmail, content); 

var sg = require('sendgrid')("**********************"); 
var request = sg.emptyRequest({ 
    method: 'POST', 
    path: '/v3/mail/send', 
    body: mail.toJSON() 
}); 

sg.API(request, function (error, response) { 
    if (error) { 
    console.log('Error response received'); 
    } 
    console.log(response.statusCode); 
    console.log(response.body); 
    console.log(response.headers); 
}); 

现在我想以异步方式调用此模块。我应该实现承诺还是使用异步,等待?

+4

顺便说一句,你发布你的API密钥,我会尽快无效。 – usandfriends

+1

删除它并没有帮助。它仍然可见 – baao

+0

setTimeout()应该工作。 – TGarrett

回答

1

根据sendgrid的docs,承诺已经实现,这使得这更容易一些,因为你可以从模块中返回承诺。例如,如果你只是想用这个承诺,您可以:

//mymodule.js 

var helper = require('sendgrid').mail; 
var fromEmail = new helper.Email('[email protected]'); 
var toEmail = new helper.Email('[email protected]'); 
var subject = 'Sending with SendGrid is Fun'; 
var content = new helper.Content('text/plain', 'and easy to do anywhere, even with Node.js'); 



module.exports = function(from, subject, to, content){ 
    var mail = new helper.Mail(fromEmail, subject, toEmail, content); 

    var sg = require('sendgrid')("**********************"); 
    var request = sg.emptyRequest({ 
    method: 'POST', 
    path: '/v3/mail/send', 
    body: mail.toJSON() 
    }); 

    return sg.API(request) 
} 

现在,你可以简单地使用它像:

mail = require('./mymodule') 

mail("[email protected]", "subject", "[email protected]", content) 
.then(function(response) { 
    // use response.body etc 
})