微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

搜索全部1000个数组后,如何转到API的第二页

如何解决搜索全部1000个数组后,如何转到API的第二页

我有代码,它在站点搜索特定的item_name。但它仅搜索网站的首页。因此,我进行了一些更改,添加kkrequired。但是问题是我得到一个错误代码,指出未定义getItemFind。我也无法向API发送垃圾邮件,因为如果每秒达到一定数量的请求,我的API密钥将被禁用。

if (command === 'item') {
    var k = 0
    var krequired = 0
    var itemFinder = message.content.substring(6)
    for (var j = 0; j <= 1000; j++) {
        console.log("searching")
        if (j >= 950) {
            console.log('next page!')
            krequired = ++k
            j = 0
        }
        if (k === krequired) {
            console.log("searching next page!")
            let getItemFind = async () => {
                let response = await axios.get(`https://api.hypixel.net/skyblock/auctions?key=<API-KEY>&page=${k}`);
                let itemFind = response.data;
                k = ++k
                j = 0
                return itemFind;
            }
        }
        let itemFindValue = await getItemFind();
        var searchItem = itemFindValue.auctions[j].item_name
        var itemFound = searchItem.toupperCase().includes(itemFinder.toupperCase())
        if (itemFound === true) {
            var itemNameDescription = itemFindValue.auctions[j].item_name
            var itemDescription = itemFindValue.auctions[j].item_lore
            var itemDescription = itemDescription.split(/§./).join("");
            const itemEmbed = {
                color: 0x0099ff,title: `${itemNameDescription}`,fields: [{
                    title: `\u200b`,value: `${itemDescription}`,inline: false,}],timestamp: new Date(),footer: {
                    text: '?help [command | category]',},};
            message.channel.send({
                embed: itemEmbed
            })
            return j
        }
    }
}

解决方法

关键字letconst的行为与var不同。如果您在代码块let内用const{...}定义了一个变量,则您创建的变量仅在该代码块内可用。

// begin code block
if (k === kRequired) {
    console.log("searching next page!")
    // this is only available in this block of code
    let getItemFind = async () => {
        let response = await axios.get(`https://api.hypixel.net/skyblock/auctions?key=<API-KEY>&page=${k}`);
        let itemFind = response.data;
        k = ++k
        j = 0
        return itemFind;
    }
}
// end code block
let itemFindValue = await getItemFind();

在您的情况下,您已经在getItemFind块中定义了函数if。有很多方法可以解决此问题。最简单的方法之一就是将变量声明移到函数作用域的顶部。

这里是一个例子,向您展示我的意思

const a = 1;
const b = 2;
if (a < b) {
    let c = 3;
    console.log('c inside code block',c)
}
console.log('c outside of code block',c)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?