将 Promise 与事件相结合
Combining Promise with Events
一个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?
});
}
这是您无法避免创建新承诺的少数情况之一。你会在 then
和 return 中这样做:
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% 的时间里,你已经有了一个可以使用的承诺(最常见的承诺错误之一是在你不需要的时候创建它们),但你没有可以用来等待您示例中的事件。
一个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?
});
}
这是您无法避免创建新承诺的少数情况之一。你会在 then
和 return 中这样做:
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% 的时间里,你已经有了一个可以使用的承诺(最常见的承诺错误之一是在你不需要的时候创建它们),但你没有可以用来等待您示例中的事件。