Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 fetch:在json解析的同时检查返回值_Javascript_Promise - Fatal编程技术网

Javascript fetch:在json解析的同时检查返回值

Javascript fetch:在json解析的同时检查返回值,javascript,promise,Javascript,Promise,这个问题是关于如何处理承诺的。例如: fetch(url) .then(res => res.json() ) .then(data => console.log(data) ) .catch(err => console.log("ERROR:", err.message)) 我的目的是在将其传递给json()之前检查res,如: 这是一个有效的选择,还是处理这种情况的“惯用”方法?然而,即使这是可能的,我仍然对是否能够执行多个承诺并优雅地

这个问题是关于如何处理承诺的。例如:

fetch(url)
  .then(res =>  res.json() )
  .then(data => console.log(data) )
  .catch(err => console.log("ERROR:", err.message))
我的目的是在将其传递给json()之前检查
res
,如:


这是一个有效的选择,还是处理这种情况的“惯用”方法?然而,即使这是可能的,我仍然对是否能够执行多个承诺并优雅地处理它们感兴趣。

问题是
res.text()
res.json()
都从传入流读取http请求的主体,一旦他们读取了它,它就从流中消失了-无法再次读取。所以,你不能叫一个,然后叫另一个。您只能在任何给定请求中使用其中一个

如果要在将数据解析为JSON之前查看数据,则必须获取文本并保留它,然后手动调用文本上的
JSON.parse()

因此,你的方案如下:

fetch(url)
  .then(res => res.text())
  .then(raw => {
    let data = JSON.parse(raw) //this is no longer a promise...
    console.log(data)
    return data;
  });
是实现这一点的一般方法,但您只需要添加
返回数据
,这样promise的解析值就变成了解析的Javascript对象,以便任何试图使用此数据的人都可以访问它

这就是你要做的事情的方法——没有其他神奇的方法

fetch(url)
  .then(res => { res.text() })
  .then(raw => {
    let data = JSON.parse(raw) //this is no longer a promise...
    console.log(data)
  })
  .catch(err => console.log("ERROR:", err.message))
fetch(url)
  .then(res => res.text())
  .then(raw => {
    let data = JSON.parse(raw) //this is no longer a promise...
    console.log(data)
    return data;
  });