Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 穿越res.json()的黑魔法_Javascript_Node.js_Fetch Api_Node Fetch - Fatal编程技术网

Javascript 穿越res.json()的黑魔法

Javascript 穿越res.json()的黑魔法,javascript,node.js,fetch-api,node-fetch,Javascript,Node.js,Fetch Api,Node Fetch,为了避免XY问题,我的最终目标是:获取一些东西,使用响应主体,并返回响应(用户应该能够从中获取主体),而不单独返回主体。从理论上讲,这应该是可行的: const res=wait fetch(“某物”) const clone=res.clone() const body=await clone.json() //使用主体 返回res 如果幸运的话,这个过程将在等待clone.json()期间结束。如果我不这样做,它就会冻结。永远 作为提醒,res.json不能被调用两次 它是否认为我不够好,

为了避免XY问题,我的最终目标是:获取一些东西,使用响应主体,并返回响应(用户应该能够从中获取主体),而不单独返回主体。从理论上讲,这应该是可行的:

const res=wait fetch(“某物”)
const clone=res.clone()
const body=await clone.json()
//使用主体
返回res
如果幸运的话,这个过程将在
等待clone.json()
期间结束。如果我不这样做,它就会冻结。永远

作为提醒,
res.json
不能被调用两次

它是否认为我不够好,无法收到错误消息?有什么帮助吗?多谢各位

进展
我找到了错误:在
node\u modules/node fetch/lib/index.js:416
中,操作结束时的侦听器从未触发。我还是不知道为什么


将URL替换为
时https://jsonplaceholder.typicode.com/todos/1“
,一切正常。这可能与服务器有关。我看不到请求的来源与是否可以克隆请求之间有任何联系


res.text()
放在
clone.json()
之前可以神奇地修复它,但这会使一切失去其目的


通过修改模块的代码,我发现响应实际上永远不会结束。JSON被剪切,最后一次
数据
事件调用中的块不是JSON的结尾,因此永远不会调用
结束
事件。非常混乱



我在这个问题上花了太多的时间,我将通过单独返回尸体来避免它。

这似乎很好

constmyfetch=async(url)=>{
const resp=等待获取(url),
clone=resp.clone()
json=wait clone.json()
log('inner:',json.title)
返回响应
}
myFetch('https://jsonplaceholder.typicode.com/todos/1')
.then(resp=>resp.json())

.then(json=>console.log('outer:',json.title))
如果将克隆/json逻辑放入承诺中并避免使函数异步,会有什么变化吗?我还没有尝试过,但为什么会有什么变化呢?如果您认为有错误,但没有看到,请尝试将代码放在
try catch
块中,如
try>{/*您的代码*/}catch(e){console.warn(e)}
是的,这是我的第一个猜测,我已经尝试过了……我会再检查一次。听起来,您正在访问的端点在通过数据管道传输后没有正确关闭连接。它有时工作的原因可能是因为端点在关闭/超时时终止非活动连接,然后触发“结束”列表r、 是的,它确实有效,即使在我的机器上复制它…还有其他问题,让我调查一下。。。