КонтекстНе удается скомпилировать код асинхронной с генераторами в машинописном
В моем путешествии в машинописном, мне посоветовали, что блокирующие вызовы никогда не должно быть сделано в асинхронном коде.
Я также использую генераторы, так как они облегчают прохождение каталогов и избегают исчерпания пространства стека.
Однако, когда я совмещаю код асинхронного (в данном случае: readdir
) с генераторами, компилятор жалуется, что выход может быть использован только внутри генераторов, что приводит меня к мысли о том, что компилятор не в состоянии объединить замыкания, генераторы и асинхронный код, все за один раз.
function *yyyymmGenerator(dir: string, props: Props) {
const fs = require("fs");
const yyyy = props.range.getUTCFullYear().toString();
const mm = props.range.getUTCMonth().toString();
const start = `${yyyy}-${mm}`;
const files = fs.readdir(dir, function(err, files) {
for (let i = 0; i < files.length; i++) {
const file: string = files[i];
if (file.localeCompare(start) >= 0) {
const d = `${dir}/${file}`;
yield file;
}
}
});
}
error TS1163: A 'yield' expression is only allowed in a generator body.
Вопросы
Что бы быть рекомендуемым лучшая практика в такой ситуации?
Было бы хорошо, если бы я просто рассматривал все, синхронизируя, блокируя код, но «обертывая» вызов внутри обещания?
См http://stackoverflow.com/questions/41326217/js-how-to-use-generator-and- yield-in-a-callback –