【发布时间】:2021-07-19 09:45:36
【问题描述】:
在本文档中:MDN - Promise() constructor
有一句话:
- 执行器中的操作是异步的,并提供回调。
这是代码
console.log('before promise');
new Promise(function(resolve, reject) {
console.log('promise');
let j = 0;
for (i = 0; i < 1000000000; i++) {
j++;
}
resolve(1);
console.log('promise end');
}).then(function() {
console.log('then');
});
console.log('not promise but after');
在控制台中显示
- 承诺之前
- 承诺
- 承诺结束
- 不是承诺而是在之后
- 那么
我认为一旦 executor 中的操作是异步的,那么 Javascript 不应该等待 executor 中的代码完成,并且应该在“before promise”之后显示“not promise but after”。但似乎我不明白这句话的意思。谁能解释一下这是什么意思?
【问题讨论】:
-
Executor函数同步执行。 Promise 不用于异步处理;它们是 already asynchronous 操作的包装器,它会通知您 already asynchronous 操作是成功完成还是失败。
-
promise 不会自动启用多线程。你阻塞了主线程,promise 在这里无济于事
-
@evolutionxbox JavaScript 是单线程的。并发:Why doesn't JavaScript support multithreading?
-
要做这样的事情,你必须在中间等待。您可以使用异步函数代替新的 Promise,并在循环中放置一个
await new Promise(r => setImmediate(r))。 -
@jabaa 是的。我的观点是 promises 并没有启用它。我们同意
标签: javascript asynchronous promise