这个问题在这里已有答案:
我试图使用异步函数来调用另一个函数内的函数 . 它看起来像这样:
const getConnectionsWithEmailsHash = async () => {
const connectionsWithEmails = await parseConnections('./tmp/connections.csv')
console.log(connectionsWithEmails)
return connectionsWithEmails
}
const connectionsWithEmailsHash = getConnectionsWithEmailsHash()
console.log(connectionsWithEmailsHash)
当我在async函数中调用console.log()时,我得到了我期望的哈希,但是当我调用异步函数的console.log()时,我得到了未来的承诺 . 我虽然异步函数的意思是它等待在调用时解析的承诺,所以我做错了什么?
3 回答
async
函数返回promise . 这一行:...只需将
connectionsWithEmailsHash
设置为函数返回的承诺 . 要实际获得承诺的分辨率值,您需要:async
函数中使用await
(如果这意味着在顶层使用async
,请参阅:How can I use async/await at the top level?):要么,
then
getConnectionsWithEmailsHash本身仍然是一个异步函数 . connectionsWithEmails是有效的,因为您等待parseConnections,但connectionsWithEmailsHash无效,因为getConnectionsWithEmailsHash并行运行 . 尝试“await getConnectionsWithEmailsHash” .
现在,如果你想在顶级使用它,这是另一个问题 . 这个问题得到了解答here .
我认为你不需要包装函数 . const connectionWithEmailHash = await parseConnections(arg);
这应该适用于给定的代码 .
由于异步函数应返回一个promise,因此有问题的代码段将无效 . 因此,尝试在getConnectionWithEmailHash中返回一个promise,该promise使用connectionsWithEmails解析,您的代码应该可以正常工作 .