gpt4 book ai didi

javascript - 为什么我需要在不同的函数中再次异步/等待?

转载 作者:行者123 更新时间:2023-11-28 17:02:21 24 4
gpt4 key购买 nike

我很困惑为什么需要在另一个函数中再次运行 async/await

示例

async function fetchData() {
try {
const result = await axios.get('http://example.com')
return result

} catch(err) {
return err

}
}


// and in another function I need to async await again

// if I want to get the value of fetchData()

// or else it will return pending promise object


function mapData() {
const data = fetchData()
console.log(data) // is a Pending Promise
}

如果我想获取数据而不是 Promise 对象

async function mapData() {
const data = await fetchData() // I still need to await??
console.log(data) // real value
}

我想如果我已经在 fetchData 中异步/等待函数它已经返回一个值而不是promise,为什么我需要再次异步/等待才能获取 mapData 中的实际数据功能?

最佳答案

async 函数将始终返回一个 Promise - 一旦异步函数到达末尾(在任何可能包含 await 之后)就会解析的 Promise。它不会神奇地使异步代码同步;异步函数的任何使用者也必须处理其异步性。

在消费者中处理错误通常也更有意义。在这里,您似乎没有对 fetchData 中的错误执行任何特殊操作,因此您可以立即返回 Promise,而无需在下游等待它功能:

function fetchData() {
return axios.get('http://example.com');
}
async function mapData() {
try {
const data = await fetchData()
console.log(data)
} catch(e) {
console.log('Something went wrong...');
// handle failure of fetchData
}
}

关于javascript - 为什么我需要在不同的函数中再次异步/等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57002243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com