javascript - 获取请求并在一行中将其转换为 JSON
问题描述
我有这段代码要重构:
import handler from "./libs/handler.js";
import fetch from "node-fetch";
async function checkResponseStatus(res) {
if(res.status >= 400) {
throw new Error(await res.text());
} else {
return res;
}
}
export const lambda = handler(async (event, context) => {
const api = process.env.IEXSandbox ? "sandbox" : "cloud";
const ticker = event.ticker.toLowerCase();
const token = process.env.IEXPublishableToken;
const version = process.env.IEXVersion;
const req = `https://${api}.iexapis.com/${version}/stock/${ticker}/quote?token=${token}`;
const res = await fetch(req).then(checkResponseStatus);
return await res.json();
});
它本质上是fetch
第 3 方 API,即 IEXCloud,它工作正常并且完成了它的工作。但是,我想在返回之前对响应做一些工作,所以我可以简单地这样做:
const res = await fetch(req).then(checkResponseStatus);
const x = await res.json();
return x.companyName;
但是,我觉得这很笨拙。我想知道我是否只能定义一个对象而不是同时拥有res
and x
。这可以按照我的方式完成,但出于学习目的,我想知道。感谢您的阅读!
解决方案
您还可以像这样在 ECMAScript 2017 上嵌套 async await 语法:
const data = await (await fetch('api/route')).json();
推荐阅读
- localization - Is it a good idea to cascade localization translation files?
- azure - Coexistence between Azure P2S VPN and Expressroute
- powerbi - How to update/edit refresh schedules using API?
- acumatica - Acumatica 和 Outlook 插件 - 自定义
- python - 如何从“data-at”中提取文本?
- tensorflow - 如何让BERT模型收敛?
- swiper - 如何在 swiper 库中自定义幻灯片的宽度
- c++ - 使用范围运算符进行对象实例化
- android - 尝试从不同用户配置文件的图库中选择图像
- reactjs - 如何在反应组件中与历史推送建立活动链接?