使用node实现请求的需要的接口
newList.js
//
var express = require('express');
var router = express.Router();
// 动态路由处理
for (let i = 1; i <= 100; i++) {
router.get('/file'+i, function (req, res) {
setTimeout(() => {
res.send({
code: 0,
msg: '查询成功',
data: 'file'+i
});
}, Math.random()*4000);
});
}
module.exports = router;
app.js
const express=require("express");
const path=require("path")
// 处理跨域的插件
const cors = require('cors')
//引入文章路由
const newListRouter = require('./routes/newList');
const app=express();
// 处理跨域
app.use(cors())
// 当以/public/ 开头的时候,去./public/ 目录中去找对应的资源
app.use(express.static(path.join(__dirname, '/public')));
app.use('/newList', newListRouter);
//端口
app.listen(3000,function () {
console.log("127.0.0.1:3000")
});
前端请求
export function concurRequest(urls, maxNum) {
return new Promise((resolve, reject) => {
// 处理边界情况,发送方的请求数组为0,则直接返回
if(urls.length === 0){
resolve([1])
return // return的作用是让后面的代码不在继续去执行
}
console.log('后面的会执行了11')
// 存储返回来的数据
const results = []
// 请求的下标
let index= 0
// 当前请求的完成数量
let count = 0
// 发送请求
async function request(){
// 处理无休止的发送请求
if(index === urls.length){
return
}
// 保存当前这个下标用来存储当前的数据、
// 为啥要把index的值保存起来呢?
const i = index
console.log('results',urls[index])
const url = urls[index]
// 这里直接加? 应该是等待接口完成之后再加哈!
// 在这里直接加的原因是因为:一次要请求10个,如果你放在请求完成后再加,就不是并发了
index++
try{
const resp= await fetch(url)
results[i] = resp
}catch(err){
results[i] = err
}finally{
console.log('xxxx', index, i)
count++
// 如果全部请求的都完成了,直接返回所有的结果
if(count === urls.length){
resolve(results)
}
// 想一下:如果前面1-10个请求,为啥没有出现造成20个请求?
// 因为起那么那里的无休止请求处理了这个问题
request()
}
}
const times = Math.min(maxNum,urls.length)
for(let i=0;i<times;i++){
request()
}
})
}
使用
import {concurRequest} from '@/util/util.js'
created(){
let arrs= []
for (let i = 1; i < 9; i++) {
arrs.push('http://127.0.0.1:3000/newList/file' + i)
}
concurRequest(arrs, 10).then(res=>{
console.log('返回来的数据concurRequest:', res)
})
}
标签:index,const,请求,实现,express,并发,let,urls
From: https://www.cnblogs.com/IwishIcould/p/18492110