Да, это возможно. Смотрите этот вопрос . Вот как вы бы это реализовали:
Function.prototype.async = async;
function async() {
setTimeout.bind(null, this, 0).apply(null, arguments);
}
function callcc(f, cc) {
f.async(cc);
}
Тогда вы можете использовать его следующим образом:
pythagoras.async(3, 4, alert);
function pythagoras(x, y, cont) {
callcc.async(square.bind(null, x), function cc(x_squared) {
callcc.async(square.bind(null, y), function cc(y_squared) {
add.async(x_squared, y_squared, cont);
});
});
}
function square(x, cont) {
multiply.async(x, x, cont);
}
function multiply(x, y, cont) {
cont.async(x * y);
}
function add(x, y, cont) {
cont.async(x + y);
}
Вы можете поиграть с демо здесь: http://jsfiddle.net/brZrd/