简单的小脚本

用来显示答案。
首先,脚本要用Axios

// jsdelivr cdn地址:https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
let ax = async(url,data)=>{
  let config = {};
  config.method = "POST";
  config.timeout = 16000;
  config.responseType = 'json';
  config.url = url;
  config.data = data;
  config.headers = {
      'Authorization': window.localStorage.getItem("token")
  };
  return await axios(config)
}
let getAnswerByTopicId = async(topicId, getParseContent)=>{
  topicId = topicId.toString()
  let eb = await ax("//api.zsyst.zhixinhuixue.com/exam/edit-basket", {
      originType: 1,
      type: 1,
      topicIds: topicId,
      subjectId: 0
  })
  if (eb.data.status != 1) {
      return eb.data.message;
  }
  let vb = await ax("//api.zsyst.zhixinhuixue.com/exam/view-basket", {
      subjectId: 0
  })
  eb = await ax("//api.zsyst.zhixinhuixue.com/exam/edit-basket", {
      topicIds: topicId,
      type: 3,
      subjectId: 0
  })
  if (eb.data.status != 1) {
      return eb.message;
  }
  let ans = `${vb.data.data[0].topic_id}: ${vb.data.data[0].correct_answer}`;
  if(getParseContent){
    return [ans, vb.data.data[0].parse_content]
  }
  return ans
}

要在登录状态下的主页操作。
在这里插入图片描述

这段代码定义了一个异步函数 ax,该函数使用 axios 库向指定的 URL 发送 POST 请求。该函数的参数 urldata 分别表示请求的 URL 和要发送的数据。发送请求时,使用的配置包括请求方法、超时时间、响应类型、URL 和数据,以及请求头部信息。

另一个函数 getAnswerByTopicId 也是异步函数。它会接收两个参数:topicIdgetParseContent。函数会将 topicId 转换为字符串,然后使用 ax 函数向指定的 API 发送两个 POST 请求。第一个请求会添加一个试题到篮子里,第二个请求会查看篮子里的试题。如果 API 返回的状态不是 1,则函数会返回 API 返回的错误信息。

如果 API 返回的状态是 1,则函数会返回试题的正确答案。如果 getParseContent 参数为真,则还会返回试题的解析内容。

顺便分享下一种个人觉得很能装逼的写法

[.../* 题目ID */].reduce((promise, n) => promise.then(() => getAnswerByTopicId(n)).then(result => console.log(result)), Promise.resolve());
Array.from({length: /* 题目总数 */}, (v, i) => /* 起始题目ID */ + i).reduce((promise, n) => promise.then(() => getAnswerByTopicId(n)).then(result => console.log(result)), Promise.resolve());

这段代码涉及到的 JavaScript 知识包括:

  1. 异步函数(async function):使用 async 关键字声明的函数会返回一个 Promise 对象,可以在函数体内使用await 关键字调用异步操作。
  2. reduce 方法(reduce method):用于对数组中的所有元素执行指定的函数,并返回一个值。
  3. from 方法(from method):用于创建一个新数组,其中包含指定数目的元素,并使用给定的函数对每个元素进行转换。
  4. Promise 对象(Promise object):表示一个异步操作的最终状态(完成或失败)及结果。可以通过 then 方法注册回调函数,并使用 catch 方法捕获异常。

它们都是使用 reduce 方法对指定的题目 ID 数组进行处理——创建一个题目 ID 的数组,并对数组中的每个元素都执行 getAnswerByTopicId 函数,然后将结果打印到控制台。

第一部分的数组是使用手写的题目 ID 生成的,第二部分的数组是使用 Array.from 方法和手写的参数生成的。

两个部分都是通过 reduce 方法实现的,它们都会对数组中的每个元素执行指定的函数,并将执行结果作为下一次执行的参数。每次执行的函数是 getAnswerByTopicId,并将执行结果打印到控制台。

两个部分的 reduce 方法的初始值都是一个已被解决的 Promise 对象,即 Promise.resolve()。这样可以保证第一次执行时不会出错。

在这段代码中,reduce 方法的第一次执行会调用指定的函数,并将结果作为下一次执行的参数。如果初始值不是一个已被解决的 Promise 对象,而是一个等待解决的 Promise 对象,那么在第一次执行时,reduce 方法会尝试将等待解决的 Promise 对象作为参数传递给指定的函数,从而导致错误。

如果使用 Promise.resolve() 方法作为 reduce 方法的初始值,那么第一次执行时,reduce 方法会将一个已被解决的 Promise 对象作为参数传递给指定的函数,这样就可以避免错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值