Je lis un livre sur les modèles de conception de noeud, c'est un code de la page 99 here:partiellement l'application à l'aide mkdirp Function.prototype.bind()
function download(url, filename, callback) {
console.log(`Downloading ${url}`);
let body;
async.series([
callback => { //[1]
request(url, (err, response, resBody) => {
if(err) {
return callback(err);
}
body = resBody;
callback();
});
},
mkdirp.bind(null, path.dirname(filename)), //[2]
callback => { //[3]
fs.writeFile(filename, body, callback);
}
], err => { //[4]
if(err) {
return callback(err);
}
console.log(`Downloaded and saved: ${url}`);
callback(null, body);
});
}
Je ne vous suis pas ce qui se passe à //[2]
. Le livre dit que vous appliquez partiellement la fonction avec bind. D'après ma compréhension de mdn here, lorsque vous utilisez bind
vous n'appelez pas la fonction.
Comment ce code fonctionne-t-il si vous n'appelez pas mkdirp()
plus tard? S'agit-il de l'argument callback
dans fs.writeFile
?
J'ai une solution potentielle à cela. Vous donnez async.series
la liste des fonctions qu'il va exécuter et exécuter. Le mozilla mdn dit que bind renvoie une fonction prête à être exécutée. Si vous utilisez call
ou apply
vous obtenez le résultat de la fonction. async.series
veut qu'une fonction soit exécutée, donc vous utilisez bind pour l'avoir assis là sans qu'il ne soit en cours d'exécution.