gpt4 book ai didi

javascript - 如何让 JS 异步函数与他人同步运行?

转载 作者:行者123 更新时间:2023-11-29 20:46:44 26 4
gpt4 key购买 nike

以下JS代码:

function promise_GetSomething() {
return new Promise(resolve => {
setTimeout(function () {
resolve("Something gotten after 3 sec.");
}, 3000);
});
}

async function logAboutSomethingGotten() {
console.log("Before getting 3-sec-something.");
var somethingGotten = await promise_GetSomething();
console.log(somethingGotten);
console.log("After getting 3-sec-something.");
}

function doSomething() {
console.log("START");
logAboutSomethingGotten();
console.log("STOP");
}

doSomething();

...打印以下内容:

START
Before getting 3-sec-something.
STOP
Something gotten after 3 sec.
After getting 3-sec-something.

如何调整它以打印以下内容?

START
Before getting 3-sec-something.
Something gotten after 3 sec.
After getting 3-sec-something.
STOP

此外,如果异步 logAboutSomethingGotten() 返回一个值,如何同步获取和使用该值?

编辑(UTC 2019-01-12 11:14 PM):

感谢当前的回答者。当前的答案大多建议使 doSomething() 异步并等待 logAboutSomethingGotten()。我也知道这一点,但因为它可能会导致无休止的异步等待代码,所以我不喜欢该解决方案。此外,涉及管道 .then(function() { console.log("STOP"); })logAboutSomethingGotten() 的选项也很容易以某种方式解决这个问题,但是并非在所有情况下,例如我问题的同步部分。

所以,我对 logAboutSomethingGotten() 是否返回一个值特别感兴趣(例如,在进行 Ajax 调用之后,因为不推荐使用同步 Ajax)。 通过什么聪明的意思是我可以在同步流中使用这个返回值吗?

最佳答案

这样做->

async function doSomething() {
console.log("START");
await logAboutSomethingGotten();
console.log("STOP");

}

检查截图-

function promise_GetSomething() {
return new Promise(resolve => {
setTimeout(function () {
resolve("Something gotten after 3 sec.");
}, 3000);
});
}

async function logAboutSomethingGotten() {
console.log("Before getting 3-sec-something.");
var somethingGotten = await promise_GetSomething();
console.log(somethingGotten);
console.log("After getting 3-sec-something.");
}

async function doSomething() {
console.log("START");
await logAboutSomethingGotten();
console.log("STOP");

}

doSomething();

关于javascript - 如何让 JS 异步函数与他人同步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164082/

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