Решил тут потыкать Node.js. Вроде не делаю ничего сложного, но уже в самом начале у меня от асинхронщины разорвало пердак. В общем, мужики, помогите.
Есть некий модуль в вакууме, который внутри себя дергает другой модуль. Так уж вышло, что функция этого другого модуля не возвращает значение, как все нормальные люди, а ждет в аргументе коллбек, в который передает результат.
В принципе, обычная практика, но проблема вот в чем. Из за этого коллбека мне теперь нельзя просто взять и вернуть значение в переменную, в мой модуль нужно тоже пробросить коллбек, который будет проброшен во второй модуль и т.д.
Я конечно мог бы все оставить так, однако, проблема всплывает где-нибудь в другом месте и извращаться все равно придется. Например, я даже не могу нормально автотест к этому говну написать, ибо assert внутри коллбека не срабатывает.
Если наглядно, сейчас все выглядит как-то так:
module.exports = function(data, callback) {
someModule(data, function(result) {
callback(result);
);
}
Ну и в вызов я должен пробросить коллбек:
myModule(data, function(result) {
//
});
Однако, мне нужно нормальное присвоение, как в нормальных языках, то бишь
var result = myModule(data);
При синхронном выполнении, код модуля выглядел-бы примерно так:
module.exports = function(data) {
var output;
someModule(data, function(result) {
output = result;
});
return output;
}
Но как это провернуть я уже обгуглился. Повкуривал в промисы, оказалось - те-же коллбеки, только цепочкой. Объяснил, надеюсь, понятно. В общем, ткните носом, как решаются задачи подобного рода, с меня пивасик.