Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 在中获取response.status,然后在Java脚本中获取_Javascript_Json_Fetch_Fetch Api - Fatal编程技术网

Javascript 在中获取response.status,然后在Java脚本中获取

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(错误=>{ //打印一些错误消息 } } 第二个

我试图检查我的请求的状态是否为200(OK),但我不知道如何一起执行这些操作,因为第一个和第二个
。然后
,并不“彼此相似”:

函数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(错误)); }
实际上,不清楚你的职责是什么