2018年6月13日 星期三

gseries.js

function gseries(fn, data) {

    return new Promise(function (res, rej) {
        let it = fn();
        job(data);

        //----------------------------
        function job(d) {

            // 主要要不斷重複的步驟
            let g = it.next(d);
            let p = g.value;
            // p.then(...)

            if (g.done) {
                res(p);
            } else if (p instanceof Promise) {
                p.then(function (d) {
                    job(d);
                }, function (err) {
                    rej(err);
                });
            }else{
                job(p);
            }
        }
    });
}