在这种情况下,没有什么比等到收到数据,然后解析 Promise 更容易的了:
// Using Promise resolve/reject
module.exports = () => {
return new Promise(async (resolve, reject) => {
let doc = await Document();
doc.on('data', async (data) => {
resolve(data);
});
})
}
但是在这种情况下我该怎么办?
// Using async/await
module.exports = async () => {
let doc = await Document();
doc.on('data', (data) => {
// ???
});
}
你仍然需要new Promise
,你只需要使用它作为async
函数中await
的操作数,而不是使用async
函数作为执行器:
module.exports = async () => {
const doc = await Document();
return new Promise(resolve, reject) => {
doc.on('data', resolve);
});
};
但是,我建议使用 once
而不是 on
以便在事件第一次发生后删除事件处理程序 - 无论如何,承诺只能解决一次。此外,如果您有节点 v11.13.0 或更高版本,您可以使用 events.once
方法,这样您就不必自己构建承诺 - 它还可以正确处理错误事件:
const { once } = require('events');
module.exports = async () => {
const doc = await Document();
return once(doc, 'data');
};