使用fetch时回调函数返回Promise而非实际值的问题求助
问题核心原因
1. func函数未显式返回Promise链
你当前编写的func仅在内部调用了fetch,但没有将fetch生成的Promise实例向外返回,这也是你去掉then内的return后调用func拿到undefined的直接原因。先修复这个基础语法问题:
const func = (callback) => { // 新增return,把整个Promise链路向外暴露 return fetch('https://asdf.json') .then(response => { return response.json(); }) .then(data => { return callback(data) }) }
2. 异步操作无法在同步上下文直接返回原始值
这是你认知上的核心遗漏点:JS的异步操作结果永远不可能在同步执行的代码中直接拿到原始值,你调用异步函数得到的必然是Promise实例,这个是JS事件循环的运行机制决定的,和回调逻辑、return写法没有关系。
修复基础问题后,你可以通过两种方式拿到callback返回的finalValue:
- 用
then链接收结果:
func(callBack).then(finalValue => { // 所有需要用到finalValue的逻辑都要写在这个回调内 console.log(finalValue) })
- 用
async/await语法糖简化写法(await只能在async标注的函数内部使用):
const getResult = async () => { const finalValue = await func(callBack) // 这里可以直接拿到处理后的结果 console.log(finalValue) } getResult()
内容的提问来源于stack exchange,提问作者ternt
相关产品推荐
相关产品推荐

