1
我正在读一本关于节点的设计模式,这是从99页here一些代码:部分应用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);
});
}
我不是在之后//[2]
会发生什么。这本书说你部分应用绑定功能。根据我对mdn here的理解,当您使用bind
时,您不会调用该函数。
如果您以后不打电话mkdirp()
,该代码如何工作?是否在fs.writeFile
中使用callback
参数进行引用?
我对此有一个潜在的解决方案。您可以通过async.series
列出将要执行和执行的功能。 mozilla mdn表示绑定返回一个准备执行的函数。如果您使用call
或apply
您将获得该功能的结果。 async.series
想要一个函数执行,所以你使用绑定,让它坐在那里准备好没有它运行。