[英]How to call an async arrow function with await
如果我定義這樣的函數:
const getName = async () => await Promise.resolve('John');
當我嘗試使用async調用getName函數時:
const name = await getName();
console.log(`Hi ${name}`);
它拋出一個錯誤:
const name = await getName();
^^^^^
SyntaxError: await is only valid in async function
我做錯了什么?
const getName = async () => await Promise.resolve('John');
在上面,你有一個使用await
inside的異步函數(箭頭函數)。
這很好(雖然沒有意義,因為你可以直接返回承諾)。
這里:
const name = await getName();
你再次使用await
,雖然右側的函數確實返回了一個promise,但它里面出現的函數並不是async
所以它是無效的。
把它放在一個異步函數里面就可以了:
const getName = async() => await Promise.resolve('John'); const init = async() => { const name = await getName(); console.log(`Hi ${name}`); }; init();
如上所述,使getName
async
並await
內部只是一組不必要的復雜的嵌套promise,你可以簡化:
const getName = () => Promise.resolve('John'); const init = async() => { const name = await getName(); console.log(`Hi ${name}`); }; init();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.