Javascript 如何为Promise.resolve()使用异步替代方法。然后()?

Javascript 如何为Promise.resolve()使用异步替代方法。然后()?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,运行这些代码段并查看它们的持续时间,您将看到第一个代码段在10亿次循环完成之前执行log('Synchronous 2')。它花费了0毫秒,但使用async关键字的第二个代码段会阻塞log('Synchronous 2'),直到循环完成 const tick=Date.now(); const log=(v)=>console.log(`${v}\n经过:${Date.now()-tick}ms`); const notBlocked=()=>{ 返回Promise.resolve()。然后(

运行这些代码段并查看它们的持续时间,您将看到第一个代码段在
10亿次循环完成之前执行
log('Synchronous 2')
。它花费了0毫秒,但使用async关键字的第二个代码段会阻塞
log('Synchronous 2')
,直到循环完成

const tick=Date.now();
const log=(v)=>console.log(`${v}\n经过:${Date.now()-tick}ms`);
const notBlocked=()=>{
返回Promise.resolve()。然后(()=>{
设i=0;
而(i<100000000){i++;}//是异步运行的

return“异步函数同步运行,直到它们到达等待,因此如果您的目标是使用异步函数延迟某些代码作为微任务,那么您需要将等待放在那里,即使它正在等待一些无用的东西

const tick=Date.now();
const log=(v)=>console.log(`${v}\n经过:${Date.now()-tick}ms`);
const notBlocked=async()=>{
等待未定义;//直到微任务运行
设i=0;
而(i<100000000){i++;}

return“要在另一个worker中运行函数,我将使用
setTimeout
函数。为此,我创建了util函数
detach

const tick=Date.now();
const log=(v)=>console.log(`${v}\n经过:${Date.now()-tick}ms`);
//在另一个辅助进程中运行函数。
常数分离=(fn)=>{
返回新承诺((解决)=>{
设置超时(()=>{
fn();
解决();
}, 0);
});
}
常量runLoop=()=>{
设i=0;
而(i<100000000){i++;}

return“根本不清楚你在问什么。你期望的结果是什么,为什么?你试图实现什么行为?你的日志调用是同步的,因此发生在承诺解析之前。你想等到notBlocked完成执行后再继续吗?运行上面的代码,你会看到在notBlocked函数之前运行日志2返回结果。但我想使用异步等待方式写入notBlocked()我不能。@HereticMonkey我想知道async Wait的局限性是什么。什么时候我应该使用一个而不是另一个。@user2734550当这是一个可以从在线文档中学习的一般主题时,你应该小心发布。我想你可以改进你的问题。更改“我无法理解…”关于async/await的一个更正式的问题的一部分,解释为什么您包含的代码对您不好。这个问题应该是清楚的,对于遇到您相同问题的其他用户应该是有用的。log2仍然被阻止了500毫秒。我更新了我的回答我想我不完全理解async await。这对我来说是一个非常奇怪的解决方案,但它确实有效。。。哦,是的,确实很奇怪。我从来不会为生产编写这样的代码。这似乎是异步等待的一个限制。现在我想起来了。这和Promise.resolve()。then()没有什么不同,但大多数开发人员都不明白这里发生了什么,对吗?所以我想这并不是异步等待的一个限制