在一行中获取请求并将其转换为 JSON

Whi*_*aws 3 javascript fetch promise async-await

我有一段代码想要重构:

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();
});
Run Code Online (Sandbox Code Playgroud)

它本质fetch上是一个第三方 API,即 IEXCloud,它运行良好并完成其工作。但是,我想在返回响应之前对其进行一些处理,因此我可以简单地执行以下操作:

const res = await fetch(req).then(checkResponseStatus);
const x = await res.json();
return x.companyName;
Run Code Online (Sandbox Code Playgroud)

不过,我觉得这很笨拙。我想知道我是否只能定义一个对象而不是同时定义resx。这可以按照我的方式完成,但我想知道出于学习目的。感谢您的阅读!

小智 10

您还可以在 ECMAScript 2017 上嵌套 async wait 语法,如下所示:

const data = await (await fetch('api/route')).json();
Run Code Online (Sandbox Code Playgroud)