首页 > generator写异步的问题?

generator写异步的问题?

问题:运行时输入分别为路径和后缀的参数,打印出符合条件的文件
想用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);
});
【热门文章】
【热门文章】