在我的应用程序中,我有 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();
});
答案 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);
}
)