promise catch 不解析 json
promise catch does not parse json
我正在使用 Angular Http
到 post 到我的 API,当响应的状态为 200 时,它会正确解析它并只输出我的响应正如预期的那样,我使用 promise 中的第一个 .then()
来处理这个问题,但是当我的 API 出现错误时,我将其抛出状态为 400 并尝试通过 .catch()
块来处理它。
我遇到的问题是 .catch()
不只是来自 api 的原始 json 错误,它只是未定义。我的 API 的错误响应类似于:
{
"status": 400,
"message": "Bad request",
"errors": [
{
"code": "IN_USE",
"message": "Email is in use",
"field": "email"
}
],
"data": []
}
我已确保发送 application/json
headers 时同时包含 200 和 400 响应,所以我不确定为什么我的打字稿代码不会解析 json在 .catch()
我的 Typescript 由两个文件 api
和 user
组成,用户只是扩展 api 以使用我创建的 post()
方法:
api.ts
/**
* POST to the API
* @param path Where to go
* @param params What to send
*/
public post(path, params): Promise<any> {
return this.http
.post(this.apiUrl + path, params)
.toPromise()
.then(r => r.json());
}
user.ts
/**
* Registers a user and then logs them in via token
* @param name Users name
* @param email Users email
* @param password Users password
*/
register(name: string, email: string, password: string) {
this.post('/register', {
access_token: this.accessToken,
name: name,
email: email,
password: password
})
.then(r => {
// This logs the json just fine
console.log(r);
})
.catch(r => {
// This is undefined
console.log(r);
});
}
您可以尝试在 .then(r => )
部分检查状态消息,然后根据状态继续您的逻辑。
register(name: string, email: string, password: string) {
this.post('/register', {
access_token: this.accessToken,
name: name,
email: email,
password: password
})
.then(r => {
// This logs the json just fine
if(r.status == 200){
console.log(r);
}
if(r.status == 400){
console.log(r);
}
})
.catch(r => {
// This is undefined
console.log(r);
});
}
由于您的请求失败(400 状态代码),它不会通过 then
回调,它将转到 catch
回调,因为您没有post
方法它将冒泡到 register
方法捕获,因为您没有解析为 json 它不会是 json.
试试这个:
public post(path, params): Promise<any> {
return this.http
.post(this.apiUrl + path, params)
.toPromise()
.then(r => r.json())
.catch(e => throw new Error(e.json()));
}
我正在使用 Angular Http
到 post 到我的 API,当响应的状态为 200 时,它会正确解析它并只输出我的响应正如预期的那样,我使用 promise 中的第一个 .then()
来处理这个问题,但是当我的 API 出现错误时,我将其抛出状态为 400 并尝试通过 .catch()
块来处理它。
我遇到的问题是 .catch()
不只是来自 api 的原始 json 错误,它只是未定义。我的 API 的错误响应类似于:
{
"status": 400,
"message": "Bad request",
"errors": [
{
"code": "IN_USE",
"message": "Email is in use",
"field": "email"
}
],
"data": []
}
我已确保发送 application/json
headers 时同时包含 200 和 400 响应,所以我不确定为什么我的打字稿代码不会解析 json在 .catch()
我的 Typescript 由两个文件 api
和 user
组成,用户只是扩展 api 以使用我创建的 post()
方法:
api.ts
/**
* POST to the API
* @param path Where to go
* @param params What to send
*/
public post(path, params): Promise<any> {
return this.http
.post(this.apiUrl + path, params)
.toPromise()
.then(r => r.json());
}
user.ts
/**
* Registers a user and then logs them in via token
* @param name Users name
* @param email Users email
* @param password Users password
*/
register(name: string, email: string, password: string) {
this.post('/register', {
access_token: this.accessToken,
name: name,
email: email,
password: password
})
.then(r => {
// This logs the json just fine
console.log(r);
})
.catch(r => {
// This is undefined
console.log(r);
});
}
您可以尝试在 .then(r => )
部分检查状态消息,然后根据状态继续您的逻辑。
register(name: string, email: string, password: string) {
this.post('/register', {
access_token: this.accessToken,
name: name,
email: email,
password: password
})
.then(r => {
// This logs the json just fine
if(r.status == 200){
console.log(r);
}
if(r.status == 400){
console.log(r);
}
})
.catch(r => {
// This is undefined
console.log(r);
});
}
由于您的请求失败(400 状态代码),它不会通过 then
回调,它将转到 catch
回调,因为您没有post
方法它将冒泡到 register
方法捕获,因为您没有解析为 json 它不会是 json.
试试这个:
public post(path, params): Promise<any> {
return this.http
.post(this.apiUrl + path, params)
.toPromise()
.then(r => r.json())
.catch(e => throw new Error(e.json()));
}