gpt4 book ai didi

javascript - 带有异步请求的 NodeJS

转载 作者:搜寻专家 更新时间:2023-10-31 23:28:47 26 4
gpt4 key购买 nike

我遇到的似乎是 Node JS 初学者和异步请求的传统问题。

我有未知数量的用户生成的 URL,随后存储在我的 Node JS 服务器上的数组中。 Node JS 服务器必须遍历这些 URL,依次向每个 URL 发出请求。它必须按顺序执行,并且必须在移动到下一个 URL 之前等待每个响应(当将发出新请求时)。最终结果应该是所有响应(恰好是 JSON)的有序集合,作为 JSON 对象很好地存储在一起,准备好后可以将其发送回客户端。

我认为我应该使用 async NodeJS 库,并且我已经在使用 needle 来发出请求。

URLs = ["http://a", "http://s", "http://d"];
async.eachSeries(URLs, function (URL, callback) { ..... });

我不清楚如何使用异步来确保 Needle 请求已完成,并在移动到下一个 URL 请求之前相应地存储该响应。以下是我的 Needle 请求示例。

 needle.get(URL, options, function(error, response, body){ ... });

欢迎对整个问题提出部分或完整的解决方案。

最佳答案

有了 promises,你可以这样做:

var Promise = require("bluebird");
var get = Promise.promisify(needle.get, needle);

var URLs = ["http://a", "http://s", "http://d"];
var current = Promise.fulfilled();
Promise.map(URLs, function (URL) {
current = current.then(function () {
return get(URL);
});
return current;
}).map(function(responseAndBody){
return JSON.parse(responseAndBody[1]);
}).then(function (results) {
console.log(results);
}).catch(function (e) {
console.error(e);
});

作为奖励,当网站有无效的 json 或以错误消息/空正文响应时,您的服务器不会崩溃。手动编写时,您需要为此手动 try catch ,但 promise 会处理 catch() 中的两种错误。由于 url 是由用户提供的,如果您不向非 promise 代码添加手动 try-catch,他们可以轻松地对您的服务器进行 DoS。

关于javascript - 带有异步请求的 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com