Comments 11
К сожалению, поскольку
Исходное же решение допускало некоторую алгебру над ожидаемыми задачами, что позволяло распараллеливать нужные действия.
cb
тут один на все вызовы, в таком генераторе невозможно выполнить несколько задач параллельно.Исходное же решение допускало некоторую алгебру над ожидаемыми задачами, что позволяло распараллеливать нужные действия.
Для распараллеливания задач можно использовать Promises и передать cb в метод then.
Можно ли потом, после Promise, в методе cb сделать throw и обработать эту ошибку дальше по коду? В моем случае ошибка перестовала ловиться.
cb нужен для продолжения работы генератора, не больше. И, простите, чем будет отличаться объект ошибки в возвращённом массиве от того, что передаётся в функцию? Разве объекты передаются не при помощи ссылок?
Все верно, если передавать ошибку как параметр, но если непосредсвенно в коде далее случится исключение, его уже не поймать с помощью обычных try catch, которые будут выше вокруг cb функции… в своем время это доставило мне изрядно головной боли.
Ах, так вы об этом! Если честно, то я не знаю как можно применить конструкцию try-catch к асинхронным функциям. Даже в обычном коде. Наверное, именно поэтому первым параметром в callBack передаётся объект ошибки, именно поэтому стоит делать элементарную проверку
Или же с применением изложенного подхода
asyncFunc(param1,param2,function(err,data){
if (err)
doSomeThinkAboutError();
....
};
Или же с применением изложенного подхода
var tmp=yield asyncFunc(param1,param2,cb);
if (tmp[0])
doSomeThinkAboutError();
...
Именно с этого начался проект Rx еще в Microsoft RDS. Правда язык там был не яваскрипт а C#.
а еще есть
github.com/visionmedia/co
github.com/visionmedia/co
Sign up to leave a comment.
Моя любимая особенность генераторов