fan*_*ats 5 javascript node.js promise nodemailer bluebird
Nodemailer作者已明确表示他不支持承诺。我想我应该尝试使用 bluebird,但我的尝试似乎没有捕获 Nodemailer 抛出的任何错误:
var nodemailer = require('nodemailer');
var Promise = require('bluebird');
// build the transport with promises
var transport = Promise.promisifyAll( nodemailer.createTransport({...}) );
module.exports = {
doit = function() {
// Use bluebird Async
return transport.sendMailAsync({...});
}
}
Run Code Online (Sandbox Code Playgroud)
然后我通过这样做来调用它:
doit().then(function() {
console.log("success!");
}).catch(function(err) {
console.log("There has been an error");
});
Run Code Online (Sandbox Code Playgroud)
但是,当提供无效的电子邮件时,我看到以下内容:
var nodemailer = require('nodemailer');
var Promise = require('bluebird');
// build the transport with promises
var transport = Promise.promisifyAll( nodemailer.createTransport({...}) );
module.exports = {
doit = function() {
// Use bluebird Async
return transport.sendMailAsync({...});
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我的蓝鸟承诺并未捕获节点邮件程序错误。我做错了什么?
小智 3
无法从我的头脑中说出代码有什么问题。我在承诺方面遇到了类似的问题,并决定手动承诺问题案例会更容易。这不是最优雅的解决方案,但它是一个解决方案。
var transport = nodemailer.createTransport({...});
module.exports = {
doit: function() {
return new Promise(function (res, rej) {
transport.sendMail({...}, function cb(err, data) {
if(err) rej(err)
else res(data)
});
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |