Ich habe eine Methode in einem meiner Controller. Der Zweck des Controllers ist das Drucken eines Arrays von URLs unter Verwendung von webshot package.Wie verbessert man diesen Code in Node.js und Express.js Callback-Hölle zu vermeiden
Dies ist der Code in Frage:
router.post('/capture', function (req, res, next) {
//Check params remove
var json = JSON.parse(req.body.data);
var promise = new Promise(function (resolve, reject) {
var totalImages = Object.keys(json).length;
var arrayListUrlImages = new Array(totalImages);
var counter = 0;
var completeDir = dir + ''; //Directory URL
for (var value of json) {
var url = 'http://example.com/' + id + '/' + value.anotherValue;
var folder = completeDir + id + '/' + value.anotherValue + '.jpg';
//Options for capturing image
var options = {
renderDelay: 1000,
quality: 100,
phantomConfig:
{
'local-to-remote-url-access': 'true',
'ignore-ssl-errors': 'true'
}
};
var anotherValue = value.anotherValue;
(function (anotherValue) {
webshot(url, folder, options, function (err) {
// screenshot now saved
if (err === null) {
var urlImage = "http://example.com/images/" + id + "/" + anotherValue + ".jpg";
arrayListUrlImages.push(urlImage);
counter++;
console.log("Counter: " + counter);
if (counter === totalImages) {
resolve(arrayListUrlImages);
}
}
else {
reject(err);
}
});
})(anotherValue);
}
}).then(function (arrayImages) {
res.send(arrayImages);
}).catch(function (errorVale) {
res.send(null);
});
});
Dieser Code wird ohne Probleme arbeiten ... aber ich würde besser tun. Ich weiß nicht, wie viele URLs überprüft werden müssen (Dies ist ein wichtiges Detail, weil ich für jedes oder ähnliche eine machen muss).
Ich habe über async package gelesen ... Ist bessere Option diesen Code zu etwas wie async.parallel verschieben? Kann ich den Ertrag in meinem Code verwenden?
Danke!
Ich weiß nicht, warum diese Frage überstimmt wird ... – chemitaxis