gpt4 book ai didi

javascript - 将 Promise 重构为 Async/await。为什么我的未定义?

转载 作者:行者123 更新时间:2023-12-03 02:04:55 25 4
gpt4 key购买 nike

我有 Promise 上的代码:

function one() {
return new Promise((rs,er)=>{
console.log('start');
new Promise((rr,err)=>{setTimeout(()=>{console.log('after 3 sec');rr()},3000)})
.then( sd => {
console.log('endLong');
rs();
})
});
}

one().then(_ => one()).then(_ => one());

结果我得到了同步代码。

但是当我将其重构为 async/wait

async function one() {
console.log('start');
await longtime();
console.log('endLong');
}

async function longtime() {setTimeout(()=>{console.log('after 3 sec');},3000);}

one().then(_ => one()).then(_ => one())

然后我得到:

start
endLong
start
endLong
start
endLong
Promise {<resolved>: undefined}
after 3 sec
after 3 sec
after 3 sec

出了什么问题?

最佳答案

您需要长时间才能返回 promise 。单独的 setTimeout 对于基于 Promise 的 async/await 来说没有任何意义:

async function one() {
console.log('start');
await longtime();
console.log('endLong');
}

const longtime = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log('after 0.5 sec');
resolve();
}, 500);
});

one()
.then(_ => one())
.then(_ => one())

关于javascript - 将 Promise 重构为 Async/await。为什么我的未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839451/

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