【发布时间】:2019-03-20 03:11:31
【问题描述】:
let arr = [2, 3]
let promiseA = new Promise((resolve)=>{
// await for io
resolve(arr.shift())
})
let promiseB = new Promise((resolve)=>{
// await for io
resolve(arr.shift())
})
let handler = (data)=>{
if(!data){
return console.log("no more")
}
console.log(data)
}
promiseA.then(handler)
promiseB.then(handler)
您好,我有一个关于 javascript 并发的问题。
如果promiseA和promiseB一一解决,那就没有问题了。
但是,如果两个 io 操作花费相同的时间,是否有可能将 promiseA 和 promiseB 都解析为值 2?
【问题讨论】:
-
JavaScript 不是并发语言。编程模型是单线程的。一个 Promise 会先于另一个解决,所以就是这样,但这并不是真正的 并发 问题,而是 同步 问题。最重要的是,编写这样的代码可能不是一个好主意。
-
输出可能是
3,然后是2。不可能是2,然后是2。 -
让您的问题更有趣...下次使用 Web Workers 并创建多个进程并提出相同的问题。当然,答案仍然与 Pointy 所说的相同,但会是一个更有趣的问题! :-)
标签: javascript asynchronous concurrency