Читал в другой теме, что против callback hell в языке BAS сделано расширение - знак !. Но почему-то данная конструкция не работает, как нужно:
BASExtended.prototype.test1 = function () {
sleep(2000)!
log('1');
};
BASExtended.prototype.test2 = function () {
sleep(2000)!
log('2');
};
BASExtended.prototype.test3 = function () {
sleep(2000)!
log('3');
};
BASExtended.prototype.test4 = function () {
sleep(2000)!
log('4');
};
BASExtended.prototype.test = function (callback) {
BE.c = callback;
BE.test1()!
BE.test2()!
BE.test3()!
BE.test4()!
BE.c();
};
BASExtended.prototype.main = function () {
/Browser/
eval('var t = function () {BE.test(function(){log('callback')});};');
t()!
};
BE = new BASExtended();
В цикле вызывается
_call(BE.main, null, function(){sleep(BE.delay * 1000, function(){})})!
в лог пишет следующее:
[03:20:18] Поток №1 : 1
[03:20:21] Поток №1 : 1
[03:20:24] Поток №1 : 1
[03:20:27] Поток №1 : 1
[03:20:30] Поток №1 : 1
[03:20:33] Поток №1 : 1
[03:20:36] Поток №1 : 1
[03:20:39] Поток №1 : 1
Все работает нормально, если выполнять функцию test так:
BASExtended.prototype.test = function (callback) {
BE.c = callback;
log('0');
sleep(2000)!
log('1');
sleep(2000)!
log('2');
sleep(2000)!
log('3');
sleep(2000)!
log('4');
sleep(2000)!
BE.c();
};
В логе соответственно
[03:06:36] Поток №1 : 0
[03:06:38] Поток №1 : 1
[03:06:41] Поток №1 : 2
[03:06:43] Поток №1 : 3
[03:06:45] Поток №1 : 4
[03:06:47] Поток №1 : callback
[03:06:48] Поток №1 : 0
[03:06:50] Поток №1 : 1
[03:06:52] Поток №1 : 2
[03:06:54] Поток №1 : 3
[03:06:56] Поток №1 : 4
[03:06:58] Поток №1 : callback
Т.е. если цепочка функций больше 3, то "!" не работает.
Но у меня в коде есть функции, расширяющие функционал BAS, и они вызываются из других функций, примерно так же, как я написал в нерабочем примере. Можно ли как-то это исправить с моей стороны? может, я чего-то не знаю, и нужно поменять мой код.