当客户端获取请求导致服务器端出错时,我想返回一个错误代码(400)和一条自定义消息。我不知道如何使用fetch和promissions在客户端优雅地检索这两者。
return fetch('/api/something')
.then(response => response.json())
.then(json => {
console.log(json.message)
// I only have access to the json here.
// I'd also like to get the response status code
// (from the response object) and potentially
// throw an error complete with the custom message.
})
.catch(function(ex) {
console.log('Unhandled Error! ', ex);
});
谢谢
回答我自己的问题。
编辑
在阿米特和费利克斯的帮助下,我已经确定了下面的代码,因为它对我来说最容易阅读。
async function format(response) {
const json = await response.json();
return {response, json};
}
function checkStatus(response, json) {
if (response.status < 200 || response.status >= 300) {
var error = new Error(json.message);
error.response = response;
throw error;
}
return {response, json};
}
return fetch('/api/something')
.then((response) => format(response))
.then(({response, json}) => checkStatus(response, json))
.then(({response, json}) => {
console.log('Success!', json.message);
})
.catch((error) => {
if (error && error.response) {
console.log('error message', error.message);
} else {
console.log('Unhandled error!');
}
});
...结束编辑
promise。所有的
都会像这里描述的那样对我起作用:我如何访问以前的promise结果。然后是链条?。然而,我觉得这是不可读的。因此,ES7async
功能将起到拯救作用!
async function formatResponse(response) {
var json = await response.json();
response.json = json;
return response;
}
function checkResponseStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response;
} else {
var error = new Error(response.json.message);
error.response = response;
throw error;
}
}
function handleResponse(response) {
console.log('success!', response.json);
}
function handleError(error) {
if (error && error.response) {
console.log('error message', error.message);
console.log('error response code', error.response.status)
} else {
console.log('Unhandled error!');
}
}
return fetch('/api/something')
.then(formatResponse)
.then(checkResponseStatus)
.then(handleResponse)
.catch(handleError);
您只能访问JSON字符串,因为这是您在第一次中从onfully回调返回的内容。然后()
。更好的方法是返回promise。all()
解析为具有原始响应对象和“已解析”JSON对象的数组的包装器:
return fetch('/api/something')
.then(response => Promise.all([response, response.json()]))
.then(([response, json]) => {
if (response.status < 200 || response.status >= 300) {
var error = new Error(json.message);
error.response = response;
throw error;
}
// Either continue "successful" processing:
console.log('success!', json.message);
// or return the message to seperate the processing for a followup .then()
// return json.message;
})
.catch(function(ex) {
console.log('Unhandled Error! ', ex);
});
问题内容: 我有一个配置有注释的资源服务器,它通过参数引用授权服务器,如下所示: 授权服务器/用户端点返回其扩展名,例如带有电子邮件: 每当访问某些资源服务器端点时,Spring都会通过调用授权服务器的/user端点来验证幕后的访问令牌,并且实际上会获取丰富的用户信息(其中包含例如电子邮件信息,我已经使用Wireshark进行了验证)。 所以问题是,如何在不显式第二次调用授权服务器端点的情况下获取
Appium 的 iOS 版本的后端用的是Facebook's WebDriverAgent。该后端是基于苹果公司的 XCTest 框架,所以也有所有XCTest 框架已知的问题。其中有些问题我们正在设法解决,有一些在现阶段可能无法解决。本文中描述的方法已经能够使您完全掌握在设备上如何构建、管理和运行WDA。通过这种方式,您可以在CI环境中对您的自动化测试进行微调,并使其在长期运行的情况下更加稳定
问题内容: 有什么方法可以使用https://github.com/marmelab/react- admin 软件包执行服务器端表单验证? 这是AdminCreate组件的代码。它将创建请求发送到api。如果一切正常,Api将返回状态为422或状态码200的验证错误。 因此,问题是,如何从服务器发送的错误对象中分别显示每个字段的错误?这是错误对象的示例: 先感谢您! 现在我有以下代码,它显示验证
问题内容: 是否有清除JavaScript 实例的方法? 我已经在QUnit之上编写了一个JavaScript测试框架。该框架通过在.NET中运行每个测试来同步运行测试。(很抱歉,此代码块的长度。我已尽我所能对其进行了评论,因此它不会那么乏味。) 如果测试超时,我的超时Promise将会在测试中进行测试,以便将测试标记为失败,这一切都很好,但是测试继续运行,因为测试Promise()仍在等待解决它
我在spring rest api上工作,我想确保一切都正常工作。我想记录异常行为数据库连接错误等等,我正在使用couchbase数据库,并在endpoint响应中获得例如此类异常:下一条消息:和一个非常长的跟踪。 为此,我在internet上找到了一个解决方案,即扩展ResponseEntityExceptionHandler并重写handleExceptionInternal方法,如下所示:
我在一台Tomcat Web服务器上部署了多个Web应用程序。对于所有已部署的 Web 应用程序,如果任何 Web 应用程序中发生 404 错误,我希望显示相同的 404.jsp 页面。 一种方法是在每个 Web 应用程序的 Web 中放置一个条目 404.xml并为 404.jsp 提供适当的位置。 有没有办法让所有 Web 应用程序在 404 错误上显示 ROOT 的 404 页面? 谢谢,帕