首页 文章

为什么我的异步函数太快返回? [重复]

提问于
浏览
2

这个问题在这里已有答案:

我试图使用异步函数来调用另一个函数内的函数 . 它看起来像这样:

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 回答

  • 4

    async 函数返回promise . 这一行:

    const connectionsWithEmailsHash = getConnectionsWithEmailsHash()
    

    ...只需将 connectionsWithEmailsHash 设置为函数返回的承诺 . 要实际获得承诺的分辨率值,您需要:

    const connectionsWithEmailsHash = await getConnectionsWithEmailsHash()
    

    要么,

    • 在承诺上使用 then
    getConnectionsWithEmailsHash()
    .then(connectionsWithEmailsHash => {
        // ...use `connectionsWithEmailsHash`....
    })
    .catch(error => {
        // ...handle error...
    })
    
  • 2

    getConnectionsWithEmailsHash本身仍然是一个异步函数 . connectionsWithEmails是有效的,因为您等待parseConnections,但connectionsWithEmailsHash无效,因为getConnectionsWithEmailsHash并行运行 . 尝试“await getConnectionsWithEmailsHash” .

    现在,如果你想在顶级使用它,这是另一个问题 . 这个问题得到了解答here .

  • 0

    我认为你不需要包装函数 . const connectionWithEmailHash = await parseConnections(arg);

    这应该适用于给定的代码 .

    由于异步函数应返回一个promise,因此有问题的代码段将无效 . 因此,尝试在getConnectionWithEmailHash中返回一个promise,该promise使用connectionsWithEmails解析,您的代码应该可以正常工作 .

相关问题