2016-09-12 27 views
2

プロミスの非同期機能をイベントと組み合わせて行う方法は?イベントとプロミスを組み合わせる

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? 
    }); 
} 
+1

'event'はイベントではありません。確かにそれは「エミッター」 - イベントを発するものです。 –

答えて

4

これは、新しい約束をすることを避けることができない少数の状況の1つです。あなたは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%は、すでに(と約束して、最も一般的なエラーの一つが、「それらあなたがドン作成されると仕事をする約束を持っていますあなたの事例でイベントを待つのに使うことはできません。

+0

bufに 'new Buffer'を設定し、各段階で文字列に変換するのではなく、バッファに連結するのは良い考えです。 –

+0

@BenjaminGruenbaum:ああ、絶対に。しかし、これは問題のことではなく、実際には何かを知ることはできません。 –

+0

心配しないで、私の悪い、私は元の質問もこれをしなかった。 –

関連する問題