【发布时间】:2021-09-30 00:22:19
【问题描述】:
我正在使用 fetch 从 json 文件中获取数据。在 .then() 中,我调用回调来处理该数据,然后最终从回调中返回最终值。问题是,当我返回时,它返回的是一个承诺而不是最终值。我查看了其他类似的问题,并认为我已经掌握了异步概念,但我仍然坚持这一点。我有什么遗漏吗?
const func = (callback) => {
fetch('https://asdf.json')
.then(response => {
return response.json();
})
.then(data => {
return callback(data)
}
}
const callBack = (parsedData) => {
//do something to get finalValue
return finalValue
}
func(callBack);
我应该补充一点,我尝试只调用 callback(data) 而不返回,但这只是返回未定义。
【问题讨论】:
-
你试图让哪个函数返回一个非承诺值?
func,还是callBack? -
@NicholasTower 我猜实际上是 func() 。我可以展开回调,只需在 .then() 中保留获取 finalValue 的步骤,但它会返回相同的内容。
-
func不可能返回最终值。它还不存在。你能做的最好的就是回报一个承诺。即func的第一行应该是return fetch('https://asdf.json')。其余的行应该能够保持不变。 -
@NicholasTower 我明白了。是的,这确实返回了一个承诺。有没有办法获得 finalValue 呢?也许来自回调?
-
为什么要使用回调?在这种情况下是多余的。你可以直接使用 Promise。
const func = (callback) => { fetch('https://asdf.json') .then(response => { return response.json(); }) .then(data => { return callback(data) } } func().then(finalValue => ...)
标签: javascript json asynchronous fetch asynchronous-javascript