【发布时间】:2021-09-26 03:32:14
【问题描述】:
我正在编写一个小的 nodejs 脚本来从另一个文件夹复制文件,修改一些文本并缩小内容。
根据我的研究,似乎有一个名为async 的模块,可以通过该模块一一调用。但我正在尝试如何在不安装任何模块的情况下做同样的事情(作为学习的一部分)。
我是这个 Promise/async 世界的新手。但我无法让它按预期顺序工作。 有人可以帮忙吗?
function updateText( textList ){
return new Promise(function(resolve, reject){
var folders = [ 'includes/lr', 'includes/vc' ];
var acceptedFileTypes = ['php', 'js', 'css'];
folders.forEach(function(dir){
files = walk(dir);
files.forEach( function ( file ) {
fs.readFile(file, 'utf8', function (err,data) {
fileType = file.split('.').pop();
if(!acceptedFileTypes.includes(fileType)){
return;
}
console.log('Editing - ' + file);
if (err) {
return console.log(err);
}
for(text in textList){
data = data.replace(new RegExp(text, 'g'), textList[text]);
}
fs.writeFile(file, data, 'utf8', function (err) {
console.log('Written file - ' + file);
if (err) return console.log(err);
});
});
});
});
console.log('Resolving')
resolve();
});
}
function minifyJS(){
return new Promise(function(resolve, reject){
minify('includes/vc/js/script-front.js').then(function(data){
console.log('Minifying file - ');
fs.writeFile('includes/vc/js/script-front.min.js', data, 'utf8', function (err) {
if (err) return console.log(err);
resolve();
});
});
});
}
updateText({
'qwerty': 'hello',
})
.then(function(r){
minifyJS().then(function(){
console.log('# Done');
});
})
输出 - 事情到处都是,而不是按顺序排列,尽管只有在编辑文件后才会解决承诺。
在这里,我期待所有编辑首先完成,然后写入,最后缩小。
Resolving
Editing - includes/lr/css/style.css
Editing - includes/vc/css/style.css
Editing - includes/vc/js/script-front.js
Editing - includes/vc/js/script-front.min.js
Minifying file -
Editing - includes/vc/js/script.js
Editing - includes/lr/js/script.js
Editing - includes/vc/index.php
Editing - includes/lr/index.php
Written file - includes/lr/css/style.css
Written file - includes/vc/css/style.css
Written file - includes/vc/js/script-front.js
Written file - includes/vc/js/script.js
Written file - includes/lr/js/script.js
Written file - includes/vc/js/script-front.min.js
# Done
Written file - includes/vc/index.php
Written file - includes/lr/index.php
【问题讨论】:
标签: node.js asynchronous promise