Simultaneously fetch urls using Axios.
This module export doFetch
function with the following signature:
/**
* @param {array<string>} queues The queues
* @param {completeCallback} callback Queue completion callback
*/
async function doFetch(queues, callback) {
}
The queues
parameter can be a simple string array as of ['url', 'url', ...]
or a complex object.
For complex objects, the following property is recognized:
-
url
, the url to fetch. -
method
, the method to use, eitherget
orpost
is supported. If none specified it will be assumed asget
. -
params
, parameters which can includes requestheaders
, URL parametersparams
, or anything else of Axios Request Config.
The callback
will be called once each queue completed. The callback function signature is described as:
/**
* @param {string|object} queue Fetched queue which is complete
* @param {string|object} res Response content returned by axios
* @param {object} headers Response headers returned by axios
*/
function callback(queue, res, headers) {
}
An additional configuration can be used to adjust doFetch
behavior:
-
The number of simultaneous workers by default set to 25 workers. To change the number of workers, call
doFetch.setMaxWoker()
with desired value, e.g.doFetch.setMaxWoker(10)
. -
The callback by default will not be fired if the response is empty. To force to always to fire the callback regardless of the response, set with
doFetch.setCheckResult(false)
-
To enable debugging, set the debugger function such as
console.log
usingdoFetch.setDebugger(console.log)
.
const doFetch = require('@ntlab/sfetch');
(async function run() {
await doFetch([
'https://example.com/foo',
'https://example.com/bar'
], function(url, res, headers) {
if (res) {
// do something here
}
});
})();
const doFetch = require('@ntlab/sfetch');
(async function run() {
const headers: {
'User-Agent': 'My-User-Agent/1.0'
}
await doFetch([
{
for: 'foo',
url: 'https://example.com/foo',
method: 'get',
params: {
headers,
params: { data: 'foo' }
}
},
{
for: 'bar',
url: 'https://example.com/bar',
method: 'post',
params: {
headers,
params: { data: 'bar' },
data: { bar: 'baz' }
}
}
], function(queue, res, headers) {
if (queue.for === 'foo') {
// do something for foo
}
if (queue.for === 'bar') {
// do something for bar
}
});
})();
const doFetch = require('@ntlab/sfetch');
(async function run() {
const queues = ['https://example.com/foo'];
await doFetch(queues, function(url, res) {
// queue returned urls from JSON response
if (res && res.urls) {
queues.push(...res.urls);
}
});
})();