javascript - generator写异步的问题?
伊谢尔伦
伊谢尔伦 2017-04-11 09:06:21
[JavaScript讨论组]

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

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
高洛峰

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);
});
PHP中文网

我会改成这样:

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);
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号