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

在 node.js 中依次组合来自多个 GET 请求的数据

如何解决在 node.js 中依次组合来自多个 GET 请求的数据

我正在编写一个带有 http 模块的 node.js 应用程序,并尝试组合来自多个 GET 请求的数据以生成结果。我检查了类似的问题,但它们都涉及 async.map 并行初始化请求。就我而言,我需要第一个 GET 请求的结果来获取一个的 URL,等等。这是我正在处理的示例:

// First GET request
https.get('URL',(resp) => {
    let data = '';
    resp.on('data',(chunk) => {
        data += chunk;
    });

    resp.on('end',() => {
        let parsedData = JSON.parse(data);
        let names = parsedData.name;
        let before_id = parsedData.messages[99].id;
    });
});

然后我想将 namesbefore_id 传递给另一个这样的 GET 请求:

// Second GET request
https.get('URL&before_id=' + before_id,() => {
        let parsedData = JSON.parse(data);
        names = //names from prevIoUs request + this parsedData.name
        let before_id = parsedData.messages[99].id;
    });
});

对于上下文:我使用的是 GroupMe API,它一次只允许我检索 100 条消息。我想检索 1000 条消息,这是通过在一批 100 条消息中查找最后一条消息的消息 id 并调用一个 GET 请求,将该消息 id 作为参数传递到 URL 中来完成的。 (这将在指定 id 之前立即请求 100 条消息)。这样我不仅需要将每个请求的 id 传递给下一个请求,而且我还需要存储我需要从每批请求中获取的数据,将它们组合起来,然后将它们一起提供。我该怎么做?

解决方法

将有比我将在回答中提出的更好的代码结构方法。但这是您想做的最起码的例子。

要使用一个异步操作的结果来启动其他一些任务,您必须将该任务嵌入到异步操作的回调中。

// First GET request
https.get('URL',(resp) => {
    let data = '';
    resp.on('data',(chunk) => {
        data += chunk;
    });

    resp.on('end',() => {
        let parsedData = JSON.parse(data);
        let names = parsedData.name;
        let before_id = parsedData.messages[99].id;
        // Second GET request
        https.get('URL&before_id=' + before_id,(resp) => {
            let data = '';
            resp.on('data',(chunk) => {
                data += chunk;
            });

            resp.on('end',() => {
                let parsedData = JSON.parse(data);
                names = //names from previous request + this parsedData.name
                let before_id = parsedData.messages[99].id;
            });
        });
    });
});
,

您可以尝试声明一个全局变量并在第一个 get 请求中更新它,方法是添加该变量,然后在下一个 get 请求中使用该数据。

let before_id = ''
// First GET request
https.get('URL',(resp) => {
    resp.on('data',(chunk) => {
        data += chunk;
    });
    before_id += parsedData.messages[99].id;
//Do other stuff
});
// Second GET request
https.get( 'URL&before_id=' + before_id,(resp)()=>{
//Do stuff
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?