Lou*_*p G 3 javascript node.js async-await
当我尝试使用下面的代码(使用异步函数)通过 imap 检索电子邮件时,我收到以下控制台输出/错误:
收件箱:未定义
/Users/mainuser/node_modules/imap/lib/Connection.js:432 cb(err, self._box); ^ 类型错误:cb 不是函数
var Imap = require('imap');
var inspect = require('util').inspect;
var imap = new Imap({
user: 'mymailname@mail.com',
password: 'mymailpassword',
host: 'imap.mail.com',
port: 993,
tls: true
});
const openInbox = async () => {
try {
const inbox = await imap.openBox('INBOX', true)
return inbox
}catch(error){
console.log("Error: "+ error)
}
}
imap.once('ready', () => {
console.log('ready')
openInbox()
.then(inbox => console.log('Inbox: ' + inbox))
});
imap.connect()
Run Code Online (Sandbox Code Playgroud)
但是,我可以打开收件箱并使用嵌套回调输出收件箱对象,如下所示:
imap.once('ready', () => {
imap.openBox('INBOX', true, (err, inbox) => {
console.log('Inbox: ' + inbox)
});
});
imap.connect()
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢使用 Promise,您应该编写一个自定义包装器imap.openBox或使用 Node.js 内置util.promisify函数包装它:
const Imap = require('imap');
const promisify = require('util').promisify;
const imap = new Imap({
user: 'mymailname@mail.com',
password: 'mymailpassword',
host: 'imap.mail.com',
port: 993,
tls: true
});
const openBox = promisify(imap.openBox.bind(imap));
imap.once('ready', () => {
console.log('ready')
openBox('INBOX', true)
.then(inbox => console.log(inbox))
.catch(err => {
console.log(err)
})
});
imap.connect()
Run Code Online (Sandbox Code Playgroud)
为了 Promisify 整个 API,请尝试将 imap 实例包装在Bluebird.promisifyAll中。请注意,promisified 方法可使用Async前缀:
const bluebird = require('bluebird');
const Imap = require('imap');
const imap = bluebird.promisifyAll(new Imap({
user: 'mymailname@mail.com',
password: 'mymailpassword',
host: 'imap.mail.com',
port: 993,
tls: true
}));
imap.once('ready', () => {
console.log('ready')
imap.openBoxAsync('INBOX', true)
.then(inbox => console.log(inbox))
.catch(err => {
console.log(err)
})
});
imap.connect()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |