Edit in JSFiddle

/**
 * @description 模拟读取文件
 */
 
console.log = function(str) {
	var node = document.createElement("p");
  node.innerHTML = str;
  document.body.appendChild(node);
}
var file = {
    'file1.txt': "file2.txt",
    'file2.txt': 'Hello, Generator!'
};
function _readFile(filename, cb) {
    setTimeout(function () {
        cb(null, file[filename]);
    }, 100)
}
function _sleep(ms, cb) {
    setTimeout(function () {
        cb(null, "已经睡眠" + ms + "ms, time is up!");
    }, ms);
}
function _readFileSync(filename, cb) {
    cb(null, file[filename]);
}
/**
* 重写thunkify函数,使其能兼容同步任务
*/
function thunkify(fn) {
    return function () {
        var args = [].slice.call(arguments);
        var ctx = this;
        return function (done) {
            var called;
            args.push(function () {
                if (called)
                    return;
                called = true;
                done.apply(null, arguments);
            })
            try {
                fn.apply(ctx, args);
                // 将任务函数置后运行
            } catch (ex) {
                done(ex);
            }
        }
    }
}
function toPromise(fn) {
    return function () {
        var thunkify_fn = thunkify(fn).apply(this, arguments);
        return new Promise(function (resolve, reject) {
            thunkify_fn(function (err, data) {
                if (err)
                    reject(err);
                resolve(data);
            })
        }
        )
    }
}
function run(generator) {
    var gen = generator();
    function next(data) {
        var ret = gen.next(data);
        if (ret.done)
            return Promise.resolve("done");
        return Promise.resolve(ret.value).then(data => next(data)).catch(ex => gen.throw(ex));
    }
    try {
        return next();
    } catch (ex) {
        return Promise.reject(ex);
    }
}
var readFile = toPromise(_readFileSync);
var sleep = toPromise(_sleep);
function* flow() {
    var file1 = yield readFile("file1.txt");
    console.log('file1的内容是: ' + file1);
    console.log(yield sleep(2000))
    // sleep 1s
    var file2 = yield readFile(file1);
    console.log('file2的内容是: ' + file2);
}
run(flow);