te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Fetch request and convert it to JSON in a single line - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Fetch request and convert it to JSON in a single line - Stack Overflow

programmeradmin3浏览0评论

I have this piece of code that I would like to refactor:

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/${version}/stock/${ticker}/quote?token=${token}`;
    const res = await fetch(req).then(checkResponseStatus);
    return await res.json();
});

It's essentially a fetch into a 3rd party API, namely IEXCloud, it works fine and does its job. However, I would like to do some work on the response before returning it, so I can simply do this instead:

const res = await fetch(req).then(checkResponseStatus);
const x = await res.json();
return xpanyName;

However, I feel like this is pretty clunky. I would like to know if I can only define a single object instead of having both res and x. This can be done my way, but I want to know for learning purposes. Thank you for reading!

I have this piece of code that I would like to refactor:

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./${version}/stock/${ticker}/quote?token=${token}`;
    const res = await fetch(req).then(checkResponseStatus);
    return await res.json();
});

It's essentially a fetch into a 3rd party API, namely IEXCloud, it works fine and does its job. However, I would like to do some work on the response before returning it, so I can simply do this instead:

const res = await fetch(req).then(checkResponseStatus);
const x = await res.json();
return x.panyName;

However, I feel like this is pretty clunky. I would like to know if I can only define a single object instead of having both res and x. This can be done my way, but I want to know for learning purposes. Thank you for reading!

Share Improve this question asked May 15, 2020 at 7:33 WhiteclawsWhiteclaws 9521 gold badge12 silver badges33 bronze badges 1
  • This is not a good question for SO. Had it had more meat on it, it could perhaps be a question for codereview – mplungjan Commented May 15, 2020 at 7:39
Add a ment  | 

2 Answers 2

Reset to default 11

You can also nested async await syntax on ECMAScript 2017 like this:

const data = await (await fetch('api/route')).json();

You can try instead of a new variable called x to catch in a then() like this:

const res = await fetch(req)
    .then(checkResponseStatus)
    .then(res => res.json());
发布评论

评论列表(0)

  1. 暂无评论