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;
});