想象一下节点中的这种情况:
var output = '';
module1.on('done', function() {
output += 'aaaa';
});
module2.on('done', function() {
output += 'bbbb';
});
// ...Doing stuff...
// Assume this is inside a promise/callback and executed after both events have fired
console.log(output);
是否可以获得aabbaabb
的输出?
答案 0 :(得分:2)
没有。在并发环境中,race conditions可能会出现类似的状态,但Node中的Javascript执行本质上是单线程的。这些方法将以原子方式执行。
This question有一些很好的相关答案
话虽如此,在大多数语言中,字符串是不可变的(因此本质上是线程安全的),所以无论如何都应该像你的例子那样交错的字符串。
答案 1 :(得分:0)
使用promises
等待每个模块完成
F.E. http://howtonode.org/promises
在每个模块中按照指定的顺序填充变量(只是一个没有承诺的想法):
var output = ['',''];
module1.on('done', function() {
output[0] = 'aaaa';
});
module2.on('done', function() {
output[1] = 'bbbb';
});
// ...Doing stuff...
console.log(output.join(''));