两个异步函数调用填充相同的数组?

时间:2016-03-08 15:44:07

标签: javascript node.js

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

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是否正常处理?它在我运行时有效,但我不确定我是否幸运没有碰撞。

1 个答案:

答案 0 :(得分:1)

  

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

JavaScript并发模型指定非阻塞事件循环。一次只有一个执行事件,中间不能运行任何事件。事件以可预测的顺序发生。使用此模型,JavaScript没有您在拥有线程时可能遇到的并发问题。

更多阅读材料:https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoophttps://en.wikipedia.org/wiki/JavaScript#Miscellaneous