Javascript 在中获取response.status,然后在Java脚本中获取
我试图检查我的请求的状态是否为200(OK),但我不知道如何一起执行这些操作,因为第一个和第二个Javascript 在中获取response.status,然后在Java脚本中获取,javascript,json,fetch,fetch-api,Javascript,Json,Fetch,Fetch Api,我试图检查我的请求的状态是否为200(OK),但我不知道如何一起执行这些操作,因为第一个和第二个。然后,并不“彼此相似”: 函数f(路径){ 等待获取(路径) 。然后(响应=>{ //console.log(响应状态); 如果(response.status!=200){ 抛出响应状态; }否则{ //做点什么 } }) .then(response=>response.json()) .then(…响应的方法.json()…) .catch(错误=>{ //打印一些错误消息 } } 第二个
。然后,并不“彼此相似”:
函数f(路径){
等待获取(路径)
。然后(响应=>{
//console.log(响应状态);
如果(response.status!=200){
抛出响应状态;
}否则{
//做点什么
}
})
.then(response=>response.json())
.then(…响应的方法.json()…)
.catch(错误=>{
//打印一些错误消息
}
}
- 第二个测试失败并返回错误
我扔那东西时有个问题
它将错误打印到控制台(当我通过将路径更改为错误路径进行检查,并希望查看是否处理错误时)
我能做什么?您在第一个履行处理程序(然后是
回调)中正确地检查了它,尽管我只使用!response.ok
。您通常不需要在后续处理程序中检查状态
但是第一个实现处理程序的问题是它没有返回任何内容,因此后续的实现处理程序只会看到未定义的
请注意,您不能在传统函数中使用等待
,只能在异步
函数中使用。但如果您使用的是,则不需要它。然后
和捕获
。我已将其删除
如果出于某种原因,您希望在后续履行处理程序中显示该状态,则必须从第一个履行处理程序返回该状态。例如:
function f(path) {
fetch(path)
.then(response => {
if (!response.ok) {
// Note: Strongly recommend using Error for exceptions/rejections
throw new Error("HTTP error " + response.status);
}
return response.json().then(data => ({status: response.status, data}));
})
.then(({status, data}) => {
// ...use `status` and `data` here...
})
.catch(error => {
// ...show/handle error here...
});
}
在这种情况下,我对来自json()
的承诺使用了一个嵌套的实现处理程序,然后返回了一个带有状态和数据的对象。您在第一个实现处理程序中正确地检查了它(然后是回调),尽管我只使用!response.ok
。您通常不需要后续处理程序中的状态
但是第一个实现处理程序的问题是它没有返回任何内容,因此后续的实现处理程序只会看到未定义的
请注意,您不能在传统函数中使用等待
,只能在异步
函数中使用。但如果您使用的是,则不需要它。然后
和捕获
。我已将其删除
如果出于某种原因,您希望在后续履行处理程序中显示该状态,则必须从第一个履行处理程序返回该状态。例如:
function f(path) {
fetch(path)
.then(response => {
if (!response.ok) {
// Note: Strongly recommend using Error for exceptions/rejections
throw new Error("HTTP error " + response.status);
}
return response.json().then(data => ({status: response.status, data}));
})
.then(({status, data}) => {
// ...use `status` and `data` here...
})
.catch(error => {
// ...show/handle error here...
});
}
在这种情况下,我在json()
的promise上使用了一个嵌套的实现处理程序,然后返回了一个包含状态
和数据
的对象。您需要在然后
链中返回,乍一看似乎太多了。查看以下示例
fetch(路径)
.then(r=>r.ok?r.json():Promise.reject('oops'))/.statusText等
.然后(r=>{
// [...]
})
.catch(e=>console.error(e));//oops
您需要在中返回,然后返回链,乍一看似乎太多了。请查看以下示例
fetch(路径)
.then(r=>r.ok?r.json():Promise.reject('oops'))/.statusText等
.然后(r=>{
// [...]
})
.catch(e=>console.error(e));//oops
a)我认为您不需要wait关键字,因为您正在使用.then()链接
b) 你必须先返回一些东西,然后才能在下一个中得到它。然后()
函数f(路径){
等待获取(路径)
。然后(响应=>{
//console.log(响应状态);
如果(response.status!=200){
抛出响应状态;
}否则{
//做点什么
//完成所需操作后,返回响应
返回响应
}
})
.then(response=>response.json())
.then(…响应的方法.json()…)
.catch(错误=>{
//打印一些错误消息
}
}
a)我认为您不需要wait关键字,因为您正在使用.then()链接
b) 你必须先返回一些东西,然后才能在下一个中得到它。然后()
函数f(路径){
等待获取(路径)
。然后(响应=>{
//console.log(响应状态);
如果(response.status!=200){
抛出响应状态;
}否则{
//做点什么
//完成所需操作后,返回响应
返回响应
}
})
.then(response=>response.json())
.then(…响应的方法.json()…)
.catch(错误=>{
//打印一些错误消息
}
}
实际上,不清楚您的函数必须做什么。但我认为您的困难来自于不完全了解承诺链的工作原理。为此,我建议您熟悉本文,它对我帮助很大:)
回到你的功能上来。优雅的解决方案是添加简单的“点击”功能,允许您使用当前响应执行某些操作,但它仍然会将响应进一步传递给其他响应。然后是链
以下是点击功能:
const-tap=(回调)=>(值)=>(回调(值),值);
最后,您可以如何使用它:
异步函数f(路径){
等待获取(路径)
.那么(
轻触((响应)=>{
如果(response.status!==200)抛出新错误(response.status);
})
)
。然后((响应)=>{
//做其他事情
})
.catch((错误)=>console.error(错误));
}
实际上,不清楚你的职责是什么