【发布时间】:2020-12-21 15:49:51
【问题描述】:
我试图找出从多个 Promise 访问对象时是否存在问题,例如:
let obj = {test: 0}
let promisesArr = []
for (let n = 0; n < 10; n++) {
promisesArr.push(promiseFunc(obj))
}
Promise.all(promisesArr)
// Then the promise would be something like this
function promiseFunc(obj) {
return new Promise(async (resolve, reject) => {
// read from the shared object
let read = obj.test
// write/modify the shared object
obj.test++
// Do some async op with the read data
await asyncFunc(read)
// resolves and gets called again later
})
}
从我所看到/测试的情况来看,不会有问题,即使处理是异步的,似乎也没有竞争条件。但也许我可能会遗漏一些东西。
我能看到的唯一问题是写入对象,然后执行一些 I/O 操作,然后读取预期之前写入的内容仍然存在
我只是在开始时才在其他异步操作之后修改对象,但是有几个 Promise 做同样的事情。一旦他们解决了,他们就会再次被调用并重新开始循环。
【问题讨论】:
-
JS 是单线程的。如果您不使用工人,您不必担心。
标签: node.js concurrency promise es6-promise