我正在尝试使用异步函数在另一个函数中调用一个函数。看起来像这样:
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()中调用异步函数的结果时,我得到了未完成的承诺。尽管异步函数的要点是,它会在调用时等待promise被解决,那么我在做什么错了?
答案 0 :(得分:4)
async
函数返回承诺。这行:
const connectionsWithEmailsHash = getConnectionsWithEmailsHash()
...只需将connectionsWithEmailsHash
设置为函数返回的承诺。要真正获得承诺的解决方案价值,您需要:
在另一个await
函数中使用async
(如果这意味着在顶层使用async
,请参见:How can I use async/await at the top level?):
const connectionsWithEmailsHash = await getConnectionsWithEmailsHash()
或
在承诺中使用then
getConnectionsWithEmailsHash()
.then(connectionsWithEmailsHash => {
// ...use `connectionsWithEmailsHash`....
})
.catch(error => {
// ...handle error...
})
答案 1 :(得分:1)
getConnectionsWithEmailsHash本身仍然是一个异步函数。 connectionsWithEmails有效,因为您正在等待parseConnections,但是connectionsWithEmailsHash无效,因为getConnectionsWithEmailsHash正在并行运行。尝试“等待getConnectionsWithEmailsHash”。
现在,如果您想在顶层使用它,那就是另一个问题。 here回答了这个问题。
答案 2 :(得分:0)
我认为您不需要包装器功能。 const connectionWithEmailHash =等待parseConnections(arg);
这应该可以处理给定的代码。
有问题的代码段将无法正常运行,因为异步功能应返回一个Promise。因此,请尝试在getConnectionWithEmailHash中返回一个用connectionsWithEmails解决的promise,您的代码应该可以正常工作。