节点和异步编程的新手。调用在两个不同的异步调用中填充数组的函数是否有问题。我正在谈论的一个简单例子是:
var myArray = [];
function filler(n) {
return new Promise(function (resolve, reject) {
for (var i = 0; i < 10; i++) {
myArray.push(n + i);
}
resolve();
});
}
filler(3).then(function () {
console.log('Done with filler passing 3');
});
filler(10).then(function () {
console.log('Done with filler passing 10');
});
setTimeout(function () {
console.log(myArray);
}, 3000);
两个异步调用都可能试图在同一时间推送到myArray。是否存在问题或者node.js是否正常处理?它在我运行时有效,但我不确定我是否幸运没有碰撞。
答案 0 :(得分:1)
两个异步调用都可能试图在同一时间推送到myArray。
JavaScript并发模型指定非阻塞事件循环。一次只有一个执行事件,中间不能运行任何事件。事件以可预测的顺序发生。使用此模型,JavaScript没有您在拥有线程时可能遇到的并发问题。
更多阅读材料:https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop和https://en.wikipedia.org/wiki/JavaScript#Miscellaneous