我是javascript的新手,我试图实现我的第一个异步等待,无法弄清楚我的问题在哪里。
getName()-应该在1秒后返回一个承诺。 f()-应该等待getName完成,然后打印名称
我想念什么?
const getName = async () => {
setTimeout(() => 'xxx', 1000)
};
const f = async () => {
name = await getName()
console.log(name)
}
f()
答案 0 :(得分:4)
除非您还在await
内使用getName
,否则不需要使getName
异步,只需要返回一个Promise
;因为await
符合诺言:
const getName = () =>
new Promise(resolve => setTimeout(resolve, 1000, 'xxx'));
async f() {
let name = await getName();
console.log(name);
}
f();
答案 1 :(得分:2)
要等待一个函数,该函数必须返回一个promise。
因此,您需要创建一个新的承诺。它将有2种方法:resolve
和reject
。
resolve
返回变量,并在成功时使用。您可以使用promise.then(value => )
或await
对其进行捕捉。reject
引发错误,并用于错误。您可以通过使用promise.catch(err => )
或等待异步功能并将其包装在try-catch块中来捕获错误。这是代码的外观:
const getName = async () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('xxx');
}, 1000)
})
};
const f = async () => {
name = await getName()
console.log(name)
}
f()