我有一个nodejs
项目,其中有N个参数的数组,需要调用endpointN次(每个参数调用一次)。然后,我需要在返回所有响应时进行监听,并且只在检索到所有结果时执行某个函数。
我知道如何在前端框架中实现上述内容,在前端框架中,我使用axios,然后将axios的响应存储在数组中(例如responseproposes
),然后执行
return Promise.all(responsePromises).then(responses => { {
//do something with the responses[0], responses[1], etc...
}
所以上面是我已经成功使用的东西。问题是,现在我需要在我的后端(我提到的是一个NodeJS
项目)中执行同样的操作。
下面给出了用于从单个endpoint检索数据的代码,如果成功,我将执行successMethod
。
let paramArray = ["one", "two", "three"];
let parsedURL = url.parse("https://this-is-my-url.com?param=" + paramArray[0]);
let proto = reqUrl.indexOf('https://') === 0 ? https : http;
let request = proto.get({
hostname: parsedURL.hostname,
port: parsedURL.port,
path: parsedURL.path
}, (response) => {
//do something on success
successMethod();
})
request.on('error', (e) => {
//do something on error
errorMethod();
});
request.end();
我不确定的是,如何在我正在使用的NodeJS
代码中应用promise.all
实现?如果我能以某种方式再次循环paramarray
数组,将承诺存储到另一个responsepropors
数组中,并仅在返回所有响应时执行successMethod将是理想的。
你可以等待所有的承诺,这确保所有的承诺都得到了回报。
proto.get({
hostname: parsedURL.hostname,
port: parsedURL.port,
path: parsedURL.path
}, async(response) => {
//make responsePromises array
const res = await Promise.all(responsePromises);
//do something on success
successMethod();
})
注释后编辑:
const responsePromises = paramArray.map(i=>{
let parsedURL = url.parse("https://this-is-my-url.com?param=" + i);
let proto = reqUrl.indexOf('https://') === 0 ? https : http;
const request = proto.get({
hostname: parsedURL.hostname,
port: parsedURL.port,
path: parsedURL.path
});
request.on('error', (e) => {
//do something on error
errorMethod();
});
return request;
})
Promise.all(responsePromises).then(responses => {
successMethod();
})
问题内容: 我正在使用python的urllib2库向特定主机发出多个http请求。每次发出请求时,都会创建新的tcp和http连接,这会花费大量时间。有什么办法可以使用urllib2保持tcp / http连接的活动? 问题答案: 如果切换到httplib,则可以更好地控制基础连接。 例如: 这将在相同的基础TCP连接上发送2个HTTP GET。
问题内容: 使用node.js时,我希望以每次仅运行10个(或n个)的方式访问多个远程URL。 如果本地发生异常(m次),我也想重试一个请求,但是当状态代码返回错误(5XX,4XX等)时,该请求将视为有效。 这对我来说真的很难缠住我的头。 问题: 无法尝试捕获http.get,因为它是异步的。 需要一种在失败时重试请求的方法。 我需要某种信号量来跟踪当前活动的请求计数。 当所有请求完成时,我想在列
问题内容: 我有以下查询,希望在单个选择请求中运行: 问题在于,所有内容都是通过单独的多个查询获取的。我只希望在单个请求中获取团队和团队的球员以及每个球员的技能。但是取而代之的是,我有多个选择查询来获取每个球队,每个球员,每个球员的数据和技能。 以下是带有给定注释的实体: 游戏实体: 团队实体: 玩家实体: 您能指出犯下的错误吗?我需要一个选择查询来加载游戏,它是团队,团队的球员和每个球员的技能。
我们有一个场景,每个Cassandra中给定,对于下面的架构: 单个 POST 请求正文包含多个值的详细信息。这将触发单个表上每个 POST 请求的多个插入。 每个INSERT查询如下所示执行: 1个 Cassandra是否确保每个POST请求在单个表上的多个插入上的数据展示一致性?每个POST请求都在Go例程(线程)上处理。后续GET请求应确保检索一致的数据(通过POST插入) 使用批处理语句在
问题内容: 我有一个javascript函数,其中有两个$ .post请求。两个$ .post请求都应该执行。但是有时候,第二个$ .post请求却没有执行。这可能是什么原因? 问题答案: 是$ .ajax()结构的缩写形式。我通常更喜欢使用该结构,因为: 比较容易发现我是否错过了任何事情 我可以更轻松地添加其他参数,例如 当刚接触ajax时,我发现对这种结构进行故障排除要容易得多 在您的情况下,
问题内容: 说我想做,如何在同一个mysql_query()中做它们? 编辑: 由于这个问题有很多看法,我想指出,自PHP 5.5起,其他功能现在已被弃用,不应使用。 问题答案: 我从来没有尝试过,但是我认为您可以使用mysqli :: multi_query 。拒绝多条语句的好处之一是,它可以立即排除一些更常见的SQL注入攻击,例如添加一条语句。因此,您可能需要注意多个语句。