2015-12-11 3 views
1

У меня есть функция, которая делает что-то в асинхронном режиме, например,Создание генератора от события эмиттера

const doSomething =() => { 
    request(url) 
    .pipe(hasher) 
    .on('finish',() => { 
    // "return" only here 
    return hasher.read(); 
    }); 
}); 

Я хотел бы сейчас «ждать» в функции до hasher.read() не может быть возвращен, а не возвращаться рано с undefined (который это то, что делает вышеупомянутый вариант).

В идеале я хотел бы использовать в качестве doSomething

const out = yield doSomething(); 

Любые намеки?

+0

Вы знакомы с [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/q/14220321/710446) – apsillers

ответ

0

Что об использовании отложила:

const q = require('q'); 

const doSomething =() => { 
    const d = q.defer(); 

    request(url) 
    .pipe(hasher) 
    .on('finish',() => { 
    // "return" only here 
    d.resolve(hasher.read()); 
    }); 

    return d.promise; 
}); 

Затем вы можете справиться с этим, как обещание и использовать yield.