Pull to refresh
6
0
Алексей Кулагин @alQlagin

Разработчик

Send message
В 3-м примере показано как SynJS.run вызывается рекурсивно чтобы обойти дерево.

я имею ввиду после того как мы получили дерево и хотим в с ним что-то сделать. Например отфильтровать узлы.


Можно вызывать вложенные SynJS.run, в этой части все как в обычном JavaScript

ну то есть от callback hell мы никуда не ушли?


SynJS.run(myFetches,null,modules,urls,function (res) {
        // обработка ошибки 1?
        SynJS.run(filterTree, null,modules,res,function (res) {
            // обработка ошибки 2?
           SynJS.run(doSomethingWithFilteredTree, null,modules,res,function (res) {
               // обработка ошибки 3?
               console.log(res); 
           });
        });
    });

@amaksr так?

SynJS.run(myFetches,null,modules,urls,function () {
        console.log('done');
    });

Если после завершения нужно выполнить еще что-то с полученным результатом, то это будет выглядеть так?


SynJS.run(myFetches,null,modules,urls,function () {
        SynJS.run(myAfterFetches,null,modules,??result?? /*где бы его получить*/,function () {
        console.log('done');
    });

    });

или есть техника как избежать SynjsHell, простите за каламбур

Судя по ридми на github в библиотеке отсутствует обработка ошибок


Following operators are not yet supported:
  • const
  • let
  • for… of
  • try… catch
    а значит вся её ценность равна нулю.

Тот же костыльPromise отлично с этим справляется.


Кстати, так вами любимый async/await тоже использует Promise


When async function is called, it returns a promise. When the async function returns a value, the promise will be resolved with the returned value. When the async function throws an exception or some value, the promise will be rejected with the thrown value.

Async function can contain await expression, that pauses the execution of the async function and waits for the passed promise's resolution, and resumes the async function's execution and returns the resolved value.

подробнее можно например тут посмотреть https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

В ноду async вам тоже нужно устанавливать и подключать. даже если нет возможности поставить пакетным менеджером всегда можно закинуть файл в папку проекта или воспользоваться cdn
На самом деле пока даже рекомендуется использовать Bluebird вместо нативных промисов. Если верить бенчмаркам, он в разы быстрее

ну так телеграм и умеет. Правда есть ограничение — можно редактировать только сегодняшние сообщения.


А вообще для общения с заказчиками очень удобная штука. Ограничение на редактирование тут помогает — всегда есть документальное подтвеждение хотелок. Тут на руку играет даже то, что удаление сообщения удаляет его только локально у пользователя, а у остальных оно остается.


От скайпа полезного осталось только звонки. Но, хотя они есть в вайбере, я предпочитаю на создать встречу и скинуть в телеграм.


А скайп… Ну что скайп. Уже история

ну все равно, согласитесь, дорого. с тем же успехом можно заплатить за готовую админку с ресурса типа https://themeforest.net/category/site-templates/admin-templates и получить ту же кучку контролол, а потом так же их самостоятельно допиливать. разница в том, что потратить придется на порядок меньше

в связке, например, nginx + nodejs такой взлом вряд ли удастся. а если еще все разнести в docker контейнеры, то все интереснее становится. для взломщика, конечно.


я не говорю что невозможно, но гораздо сложнее взломать простой заливкой файлов. на шаред хостинге так кончено не настроишься

chai дает даёт ассерты описаные языком близким к натуральному. к тому у chai есть удобный chain механизм.
Например, мы ждем от api в ответ json c какой-то конкретной ошибкой. Sould синтаксис дает понимание что мы хотим


req.body.should.be.an.Object().which.has.property('error','error text')

Ваш подход больше подходит тем, кто сам себе и программист и тестироващик. И это все-таки ближе к идеям tdd, так как не описывает поведение, а проверяет код.


A bdd — это по сути переложение тех.задания тестировщиком с учетом различных use-case. Оно и код проверяет и поведение описывает.

Минусующие поясните в чем тут проблема. С async/await подход конечно лучше, но чейн промисов вроде нормальная практика? А Q здесь можно заменить любой другой реализацией.
с вами полностью согласен. код брал as-is из оригинала. в конкретно данном примере разницы особой нет, хоть var пиши
k12th, глубоко лезть не стал в tape. На первый взгляд да приятно, но
  1. Как я понял сделать вложенные утверждения не получится
    пример
    Например «создание книги»:
    1. книга создается успешно
    2. при отсутствии поля N выдается ошибка
    3. при отсутствии заголовка H возвращается 403

    Для каждого такого описание придется делать отдельный файл, чтобы получить соответствующий вывод.

    Mocha же дает структурированный вывод + tape формат можно подключить с помощью плагина

  2. Общая настройка фикстур бывает нужна при негативном или альтернативном тестировании, когда есть набор данных и он заполняется перед группой тестов и после нее гасится

Это то, что на первый взгяд вызвало сомнения в удобстве tape.
Хотя все наверно зависит от выработанного workflow/структуры проекта
Из документации mongoose

Mongoose 5.0 will use native promises by default (or bluebird,
if native promises are not present) but still
support plugging in your own ES6-compatible promises library. Mongoose 5.0
will not support mpromise.

Information

Rating
Does not participate
Location
Ташкент, Ташкентская обл., Узбекистан
Date of birth
Registered
Activity