我对javascript完全陌生,正在学习如何将await
与异步功能一起使用。在我的情况下,我试图等待异步功能完成,这是我从catch块调用的。不适用于消息The await operator can only be used with async functions
。
begin().then( () =>
console.log("done")
)
async function begin() {
await shouldFail().then( message =>
console.log(message)
).catch( () => {
await shouldFail().then( message => // The await here is not working.
console.log(message)
).catch( message =>
console.log(message)
)
})
}
async function shouldFail(){
await sleep(1000)
return new Promise((resolve, reject) => reject('failed'))
}
我可以理解这是可能发生的,因为catch方法可能不是异步的。我试图通过上面的代码简化我的案例。知道何时在catch块内调用的异步函数完成的最佳方法是什么?我希望开始仅在catch块执行后才返回。
答案 0 :(得分:1)
根据定义:await只能在异步函数中使用。
所以您的嵌套函数也必须异步
async function begin() {
await shouldFail().then( message =>
console.log(message)
).catch( async () => { // here -----------------
await shouldFail().then( message =>
console.log(message)
).catch( message =>
console.log(message)
)
})
}
答案 1 :(得分:1)
begin().then( () =>
console.log("done")
)
async function begin() {
await shouldFail().then( message =>
console.log(message)
).catch(async () => { //**Just add a async here**
await shouldFail().then( message => // This should work now
console.log(message)
).catch( message =>
console.log(message)
)
})
}
async function shouldFail(){
await sleep(1000)
return new Promise((resolve, reject) => reject('failed'))
}
答案 2 :(得分:0)
当您使用async / await时,您无需添加then and catch块。
您可以在MDN上了解有关异步/等待的更多信息
使用异步/等待示例代码
begin().then(() =>
console.log("done")
)
async function begin() {
try {
let message = await shouldFail();
console.log(message)
} catch (e) {
try {
let message = await shouldFail();
console.log(message)
} catch (error) {
console.log(message)
}
}
}
async function shouldFail() {
await sleep(1000)
return new Promise((resolve, reject) => reject('failed'))
}