假设您需要执行一些依赖于某些临时文件的操作。自从
我们这里讨论的是 Node,这些操作显然是异步的。
等待所有操作完成的惯用方法是什么
知道什么时候可以删除临时文件吗?
这是一些显示我想要做什么的代码:
do_something(tmp_file_name, function(err) {});
do_something_other(tmp_file_name, function(err) {});
fs.unlink(tmp_file_name);
但是如果我这样写,第三个调用可以在前两个调用之前执行
有机会使用该文件。我需要某种方法来保证前两个
在不嵌套地继续之前调用已经完成(调用它们的回调)
调用(并在实践中使它们同步)。
我考虑过在回调上使用事件发射器并注册一个计数器
作为接收者。计数器将接收已完成的事件并计算有多少
行动仍悬而未决。当最后一个完成后,它将删除
文件。但存在竞争条件的风险,我不确定这是不是
通常这些东西是如何完成的。
Node 人如何解决这种问题呢?
Update:
现在我建议看一下:
如果我理解正确的话,我想你应该看看非常好的async图书馆。你应该特别看看series。只是 github 页面片段的副本:
async.series([
function(callback){
// do some stuff ...
callback(null, 'one');
},
function(callback){
// do some more stuff ...
callback(null, 'two');
},
],
// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});
// an example using an object instead of an array
async.series({
one: function(callback){
setTimeout(function(){
callback(null, 1);
}, 200);
},
two: function(callback){
setTimeout(function(){
callback(null, 2);
}, 100);
},
},
function(err, results) {
// results is now equals to: {one: 1, two: 2}
});
另外,这个库还可以在浏览器中运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)