问题:运行时输入分别为路径和后缀的参数,打印出符合条件的文件
想用generator,不知如何实现,总报错,请各位指点一下
'use strict'
var fs = require("fs");
var arr = [];
function* test() {
fs.readdir(process.argv[2], (err, list) => {
//console.log(list);
list.forEach((val, index) => {
let temp = val.split(".");
if (temp[1] === process.argv[3]) {
arr.push(val);
//console.log(arr);
}
});
yield arr;
});
}
var generator = test();
var arr1 = generator.next().value;
arr1.forEach((val,index)=>{
console.log(val);
});
yield语句不能用在普通函数中,否则会报错
fs.readdir 里的callback函数就是一个普通函数
'use strict'
var fs = require("fs");
function run(gen){
var gen_obj=gen(resume);
function resume(){
//gen_obj.next(arguments);
var list=arguments[1];
var arr=[];
list.forEach((val,index)=>{
let tmp = val.split(".");
if(tmp[1] === process.argv[3]){
arr.push(val);
}
});
console.log(arr);
gen_obj.next(arr);
}
gen_obj.next();
}
run(function* gen(resume) {
var ret,err,data;
ret=yield fs.readdir(process.argv[2],resume);
console.log(ret);
});
我会改成这样:
var test = function*() {
yield new Promise(function(resolve, reject) {
fs.readdir(process.argv[2], (err, list) => {
if (err) {
return reject(err);
}
return resolve(list.filter(item => item.split('.')[1] === process.argv[3]));
});
});
};
var generator = test();
var arr1 = generator.next().value;
arr1.then(function(list) {
console.log(list);
});