阻止任务后执行非阻塞任务

时间:2011-04-01 20:21:33

标签: javascript

在我的应用程序中,我有 n 阻塞任务,一旦完成所有阻塞任务,我想最终执行我的非阻塞任务(依赖于来自这些阻塞任务的数据)。

我目前的解决方案是让一个变量 i 在阻塞回调中加1,然后检查 i n ,如果是这样,它将执行依赖的非阻塞任务。

然而,我觉得这远远不够完美;我认为这是一个基本的问题,异步编程有一个很好的解决方案(虽然我一直无法找到更好的解决方案)。

var i;

var result_one = null;
var result_two = null;

function render() {
    if (i == 2) {
        // do something with result_one and result_two
    }
}

blocking.call(function(result) {
    result_one = result;
    i++;
    render();
});

blocking.call2(function(result) {
    result_two = result;
    i++;
    render();
});

1 个答案:

答案 0 :(得分:1)

https://github.com/creationix/step

Step(
  // Loads two files in parallel
  function loadStuff() {
    fs.readFile(__filename, this.parallel());
    fs.readFile("/etc/passwd", this.parallel());
  },
  // Show the result when done
  function showStuff(err, code, users) {
    if (err) throw err;
    sys.puts(code);
    sys.puts(users);
  }
)