11// import axios, {toFormData} from 'axios';
22import axios , { toFormData } from './axios.min.js' ;
33
4- import PQueue from 'p-queue' ;
4+ // import PQueue from 'p-queue';
5+ // import Queue from 'queue';
6+ import Queue from './queue.js' ;
57import crypto from 'crypto' ;
68import https from 'https' ;
79import fs from 'node:fs' ;
@@ -138,15 +140,84 @@ async function request(url, opt = {}) {
138140 return { headers : { } , content : '' } ;
139141}
140142
143+ // globalThis.batchFetch = async (items, maxWorkers = 5, timeoutConfig = 5000) => {
144+ // const queue = new PQueue({concurrency: maxWorkers});
145+ //
146+ // // 获取全局 timeout 设置
147+ // const timeout = timeoutConfig;
148+ //
149+ // // 遍历 items 并生成任务队列
150+ // const promises = items.map((item) => {
151+ // return queue.add(async () => {
152+ // try {
153+ // const response = await axios(
154+ // Object.assign({}, item?.options, {
155+ // url: item.url,
156+ // method: item?.options?.method || 'GET',
157+ // timeout: item?.options?.timeout || timeout,
158+ // responseType: 'text',
159+ // }),
160+ // );
161+ // return response.data;
162+ // } catch (error) {
163+ // console.log(`[batchFetch][error] ${item.url}: ${error}`);
164+ // return null;
165+ // }
166+ // });
167+ // });
168+ //
169+ // // 执行所有任务
170+ // return Promise.all(promises);
171+ // };
172+
173+ // globalThis.batchFetch = async (items, maxWorkers = 5, timeoutConfig = 5000) => {
174+ // const queue = new Queue({concurrency: maxWorkers, autostart: true});
175+ //
176+ // // 获取全局 timeout 设置
177+ // const timeout = timeoutConfig;
178+ //
179+ // const results = [];
180+ // const promises = [];
181+ //
182+ // items.forEach((item, index) => {
183+ // promises.push(
184+ // new Promise((resolve) => {
185+ // queue.push(async () => {
186+ // try {
187+ // const response = await axios(
188+ // Object.assign({}, item?.options, {
189+ // url: item.url,
190+ // method: item?.options?.method || 'GET',
191+ // timeout: item?.options?.timeout || timeout,
192+ // responseType: 'text',
193+ // }),
194+ // );
195+ // results[index] = response.data;
196+ // resolve();
197+ // } catch (error) {
198+ // console.log(`[batchFetch][error] ${item.url}: ${error}`);
199+ // results[index] = null;
200+ // resolve();
201+ // }
202+ // });
203+ // }),
204+ // );
205+ // });
206+ //
207+ // await Promise.all(promises);
208+ // return results;
209+ // };
210+
141211globalThis . batchFetch = async ( items , maxWorkers = 5 , timeoutConfig = 5000 ) => {
142- const queue = new PQueue ( { concurrency : maxWorkers } ) ;
212+ const queue = new Queue ( maxWorkers ) ;
143213
144214 // 获取全局 timeout 设置
145215 const timeout = timeoutConfig ;
146216
147- // 遍历 items 并生成任务队列
148- const promises = items . map ( ( item ) => {
149- return queue . add ( async ( ) => {
217+ const results = [ ] ;
218+
219+ items . forEach ( ( item , index ) => {
220+ queue . add ( async ( ) => {
150221 try {
151222 const response = await axios (
152223 Object . assign ( { } , item ?. options , {
@@ -156,16 +227,16 @@ globalThis.batchFetch = async (items, maxWorkers = 5, timeoutConfig = 5000) => {
156227 responseType : 'text' ,
157228 } ) ,
158229 ) ;
159- return response . data ;
230+ results [ index ] = response . data ;
160231 } catch ( error ) {
161232 console . log ( `[batchFetch][error] ${ item . url } : ${ error } ` ) ;
162- return null ;
233+ results [ index ] = null ;
163234 }
164235 } ) ;
165236 } ) ;
166237
167- // 执行所有任务
168- return Promise . all ( promises ) ;
238+ await queue . onIdle ( ) ;
239+ return results ;
169240} ;
170241
171242function base64EncodeBuf ( buff , urlsafe = false ) {
0 commit comments