【发布时间】:2018-10-23 04:53:11
【问题描述】:
我有一个对特定 API 执行大量 fetch() 调用的 JS 程序。我想将所有 fetch() 调用抽象到一个名为“apiService”的类中,这样我的代码将更具可读性。我希望 apiService 应用一些智能,然后通过以下方式将响应返回给调用者: - apiService 应该检查响应以查看是否存在错误,它必须始终以相同的方式处理。 - fetch() 有时会收到一个“res”,它是原始数据,应该按原样使用,有时它会收到需要 .then(res => res.json().then(res 应用所以它的 json可以返回一个对象。
所以我不能只从 apiService 执行“return fetch(...”),因为 apiService 需要处理一个或多个带有响应的 .then() 块。但我还需要返回一些导致调用的东西代码异步工作,不会阻塞和等待。
任何人都知道我可以如何构造 apiService 函数来处理 html 响应但也异步返回,即调用函数将在错误检查等之后接收结果对象。
【问题讨论】:
-
res不是“原始数据”,它是一个响应对象。以及您想如何检查响应,如何区分 JSON 和其他内容? -
好的,谢谢。据我了解,我只能知道是否从 API 规范中预测 json、blob 或 text 等 - 还是有更优雅的方法来测试响应类型并做出相应的响应?
-
嗯,您可以查看
res对象中的Content-type标头...或者查看状态代码,如果它是200,它应该始终是记录在案的代码。跨度> -
内容类型不能保证存在,是吗?
-
不,但我绝对不想使用不提供 API 的 API。它是基本的 HTTP 标头之一,每个适当的服务器应该设置它。 (没有内容类型,你只能
res.arrayBuffer()并有良好的判断力)
标签: javascript asynchronous promise es6-promise