没有回调的同步功能

时间:2013-03-03 13:40:42

标签: javascript function blocking synchronous serial-processing

假设我有这两个功能:

function complex() {
        setTimeout(function() {
                console.log('complex setTimeout');
        }, 1000); // assume this value is random
        function subFun() {
                console.log('complex subFun');
                setTimeout(function() {
                        console.log('complex subFunction setTimeout');
                }, 2000); // assume this value is random
        }
        subFun();
}

function simple() {
        console.log('simple');
}

假设我没有写它们 - 它们是第三方。现在我想同步调用它们并得到:

complex subFun
complex setTimeout
complex subFunction setTimeout
simple

问题是,我不能使用回调(第三方功能)。我也不能使用承诺或事件(同样的原因)。由于函数arity,我无法使用asyncstep模块。我怎么能在simple()(和所有嵌套的子函数)同步后调用complex()?还有JavaScript sux吗? :)

1 个答案:

答案 0 :(得分:1)

  

如何同步地在[异步事物]之后调用simple()?

你做不到。这是异步同步的定义。

如果你有没有反馈的异步脚本,你只有两个选择:

  • 通过setInterval或类似内容轮询脚本结果,并在检测到已到达后执行simple()
  • 将第三方替换为更好的第三方