UNPKG

926 BJavaScriptView Raw
1var Promise = require("./_").Promise;
2
3var tryErr = {};
4
5function tryCatch (step, key) {
6 try {
7 return step(key);
8 } catch (err) {
9 tryErr.err = err;
10 return tryErr;
11 }
12}
13
14module.exports = function (generator) {
15 return function () {
16 var gen = generator.apply(this, arguments);
17
18 function genNext (val) {
19 return step("next", val);
20 }
21
22 function genThrow (val) {
23 return step("throw", val);
24 }
25
26 function step (key, val) {
27 var info = gen[key](val);
28
29 if (info.done) {
30 return Promise.resolve(info.value);
31 } else {
32 return Promise.resolve(info.value).then(genNext, genThrow);
33 }
34 }
35
36 var ret = tryCatch(step, "next");
37
38 if (ret === tryErr)
39 return Promise.reject(ret.err);
40 else
41 return ret;
42 };
43};