gpt4 book ai didi

javascript - 为什么我的超时要等到等待完成后,但我的日志却没有?

转载 作者:行者123 更新时间:2023-11-30 06:51:35 25 4
gpt4 key购买 nike

如果我有这样的设置:

<-- 语言:lang-javascript -->

console.clear();

// noprotect

const fetchSomething = () => new Promise((resolve) => {
setTimeout(() => resolve('future value'), 500);
});

async function asyncFunction() {
const result = await fetchSomething();
console.log('waiting');
setTimeout(()=>console.log('waiting?'), 250);
return result + ' 2';
}

asyncFunction().then(result => console.log(result));

我的输出如下:

"waiting"
"future value 2"
"waiting?"

我希望 waiting? 在结果完成之前执行,但由于某种原因它等待函数。是什么让一个等待,另一个执行?

最佳答案

这是异步编程的一个特点。

您必须添加 await 并使用返回 Promise 的函数包装您的 setTimeout(()=>console.log('waiting?'), 250);为了让它看起来像是在不断评估。

类似于:

await ((ms) =>{
console.log('waiting?');
return new Promise(resolve => setTimeout(resolve, ms));
})(250);

或者:

await (() => new Promise(resolve => setTimeout(()=>{
console.log('waiting?');
resolve();
}, 250)))();

请注意,JS 具有单线程运行时引擎,因此它会在原始脚本结束时中断计算。

setTimeout(function, timeout) 中的函数在第一次机会和时机成熟时由 JS 求值。

所以你的函数被中断了两次,又被恢复了两次。

关于javascript - 为什么我的超时要等到等待完成后,但我的日志却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42462742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com