两个异步函数调用填充同一个数组

Two asynch function calls filling the same array?

本文关键字:函数调用 填充 同一个 数组 异步 两个      更新时间:2023-09-26

节点和异步编程的新手。 调用在两个不同的异步调用中填充数组的函数是否存在问题。 我所说的一个简单的例子是:

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优雅地处理了这个问题? 当我运行它时它可以工作,但我不确定我是否只是幸运地没有碰撞。

两个异步调用可能在同一时间尝试推送到 myArray。

JavaScript 并发模型指定非阻塞事件循环。一次只有一个正在执行的事件,并且不能在两者之间运行任何事件。事件按可预测的顺序发生。使用此模型,JavaScript 不会出现您在有线程时可能期望的并发问题。

更多阅读:https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop 和 https://en.wikipedia.org/wiki/JavaScript#Miscellaneous