@ntlab/sfetch
v1.0.0
Published
Simultaneously fetch urls
Downloads
335
Readme
Simultaneously Fetch URLs
Simultaneously fetch urls using Axios.
Usage
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 request headersheaders
or request parametersparams
.
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)
.
Examples
Fetch some urls
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
}
});
})();
Fetch some urls for further processing
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' }
}
}
], function(queue, res, headers) {
if (queue.for === 'foo') {
// do something for foo
}
if (queue.for === 'bar') {
// do something for bar
}
});
})();
Queue more urls
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);
}
});
})();