📅  最后修改于: 2023-12-03 15:38:05.254000             🧑  作者: Mango
在 Node.js 中,使用 http
模块可以轻松地发起一个 HTTP 请求。但是,当我们需要同时发起多个 HTTP 请求时,可能需要考虑并行请求的性能问题。本文将介绍如何在 Node.js 中运行多个并行的 HTTP 请求。
async/await
和 Promise.all
const https = require('https');
const urls = [
'https://jsonplaceholder.typicode.com/posts/1',
'https://jsonplaceholder.typicode.com/posts/2',
'https://jsonplaceholder.typicode.com/posts/3',
];
async function fetch(urls) {
const result = await Promise.all(
urls.map(async (url) => {
const response = await new Promise((resolve) => {
https.get(url, (res) => resolve(res));
});
return new Promise((resolve) => {
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
resolve(data);
});
});
})
);
return result;
}
fetch(urls).then((result) => console.log(result));
这段代码使用了 async/await
和 Promise.all
来处理多个并行请求。其中,Promise.all
接受一个数组,里面包含了多个返回 Promise 的 fetch
函数。通过使用 await
关键字,可以让每个请求等待返回结果。当所有请求都完成时,Promise.all
才会返回一个结果数组。
http.request
const http = require('http');
const urls = [
'http://jsonplaceholder.typicode.com/posts/1',
'http://jsonplaceholder.typicode.com/posts/2',
'http://jsonplaceholder.typicode.com/posts/3',
];
function fetchData(url) {
return new Promise((resolve, reject) => {
http
.request(url, (response) => {
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
resolve(data);
});
})
.on('error', (error) => {
reject(error);
})
.end();
});
}
async function fetch(urls) {
const result = await Promise.all(urls.map(fetchData));
return result;
}
fetch(urls).then((result) => console.log(result));
这段代码使用了 http.request
来进行多个并行请求。对于每个请求,我们都创建一个 Promise
。在 fetch
函数中,我们通过 Promise.all
来等待所有请求完成,并返回一个结果数组。
在 Node.js 中运行多个并行的 HTTP 请求,有多种实现方式。本文分别介绍了使用 async/await
和 Promise.all
,以及使用 http.request
的方式。这些方式都可以提高请求的性能和效率,选择何种方式取决于具体的使用场景。