如何与事件结合使用Promise异步功能?
function f() {
return promisedFunction().then(event => {
let buf = '';
event.on('data', data => {
buf += data.toString()
});
event.on('end', () => {
return buf;
});
// how should I return buf here so that the promise would resolve fine?
});
}
答案 0 :(得分:4)
这是少数无法避免创建新承诺的情况之一。你可以在then
中执行此操作并将其返回:
function f() {
return promisedFunction().then(event => {
return new Promise((resolve, reject) => {
let buf = '';
event.on('data', data => {
buf += data.toString()
});
event.on('end', () => {
resolve(buf);
});
event.on(/*...presumably there's an error condition?...*/, () => {
reject(/*..details of error..*/);
});
});
});
}
很容易90%的时间,你已经承诺使用(并且承诺的最常见错误之一是在你不需要时创建它们),但是你没有可以使用的错误等待你的例子中的事件。