use*_*080 1 javascript ecmascript-6
我正在尝试从 setTimeout 获取值。但控制台没有给出任何结果。如何处理这个async
功能?任何人都可以帮助我以正确的方式理解这一点吗?
这是我的尝试:
async function getTheme() {
const value = 'abc'
setTimeout(() => {
return value;
}, 3000);
}
getTheme().then(time => console.log(time)); //getting no result.
Run Code Online (Sandbox Code Playgroud)
那是因为您在setTimeout
回调中返回,它实际上并没有解决承诺。
你想要的是改为返回一个承诺:
function getTheme() {
const value = 'abc'
return new Promise(resolve => {
setTimeout(() => resolve(value), 3000);
})
}
Run Code Online (Sandbox Code Playgroud)
没有必要使用async
,因为您已经在getTheme()
函数中返回了一个承诺。
当然,您可以将整个“等待”逻辑抽象为另一个函数:然后,async
如果您愿意,可以保留:
function sleep(duration) {
return new Promise(resolve => setTimeout(resolve, duration));
}
async function getTheme() {
const value = 'abc';
await sleep(3000);
return value;
}
Run Code Online (Sandbox Code Playgroud)