• Есть ли callback по окончанию работы в mustache?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Там похоже stream возвращается, так что нужно как-то так:

    var stream = mustache.render(pages['main'], {
      'country': 'Russia',
      'city': 'Moscow',
      ...
    });
    var rendered_data = '';
    stream.on('data', function (data) {
        rendered_data += data.toString();
    });
    stream.on('end', function () {
        // Шаблон отрендерен
        console.log(rendered_data);
    });
    Ответ написан
    5 комментариев
  • Почему не проходит перебор всего массива?

    @iShatokhin
    JS developer
    Async вызовет финальный callback только тогда, когда пройдут все итерации массива, где количество итераций для него это длина массива. Согласно спецификации JS - длина массива это индекс последнего элемента + 1. В примере указан разряженный массив, а async для перебора использует Array.forEach, который пропускает отсутствующие индексы, соответственно, финальный callback не будет вызван никогда.

    Для выхода из данной ситуации можно (на выбор):
    • избегать разряженные массивы
    • ждать релиз Async 0.10, в котором произойдет отказ от Array.forEach в пользу простого цикла for (в master ветке есть соответствующий коммит)
    • перейти на альтернативную (100% совместимую) библиотеку neo_async
    Ответ написан
    Комментировать