{"id":1360,"date":"2024-06-02T22:22:19","date_gmt":"2024-06-02T22:22:19","guid":{"rendered":""},"modified":"2024-06-05T03:08:19","modified_gmt":"2024-06-04T19:08:19","slug":"es6-%e7%b3%bb%e5%88%97%e4%b9%8b-babel-%e5%b0%86-async-%e7%bc%96%e8%af%91%e6%88%90%e4%ba%86%e4%bb%80%e4%b9%88%e6%a0%b7%e5%ad%90","status":"publish","type":"post","link":"https:\/\/www.lccc.top\/?p=1360","title":{"rendered":"ES6 \u7cfb\u5217\u4e4b Babel \u5c06 Async \u7f16\u8bd1\u6210\u4e86\u4ec0\u4e48\u6837\u5b50"},"content":{"rendered":"<td class=\"d-block comment-body markdown-body  js-comment-body\">\n<h2 dir=\"auto\">\u524d\u8a00<\/h2>\n<p dir=\"auto\">\u672c\u6587\u5c31\u662f\u7b80\u5355\u4ecb\u7ecd\u4e0b Async \u8bed\u6cd5\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u3002<\/p>\n<h2 dir=\"auto\">Async<\/h2>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"const fetchData = (data) =&gt; new Promise((resolve) =&gt; setTimeout(resolve, 1000, data + 1))\n\nconst fetchValue = async function () {\n    var value1 = await fetchData(1);\n    var value2 = await fetchData(value1);\n    var value3 = await fetchData(value2);\n    console.log(value3)\n};\n\nfetchValue();\n\/\/ \u5927\u7ea6 3s \u540e\u8f93\u51fa 4\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">const<\/span> <span class=\"pl-en\">fetchData<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-en\">setTimeout<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">1000<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-en\">fetchValue<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">async<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value1<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value2<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value3<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value3<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-en\">fetchValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-c\">\/\/ \u5927\u7ea6 3s \u540e\u8f93\u51fa 4<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">Babel<\/h2>\n<p dir=\"auto\">\u6211\u4eec\u76f4\u63a5\u5728 Babel \u5b98\u7f51\u7684 <a href=\"https:\/\/babeljs.io\/repl\" rel=\"nofollow\">Try it out<\/a> \u7c98\u8d34\u4e0a\u8ff0\u4ee3\u7801\uff0c\u7136\u540e\u67e5\u770b\u4ee3\u7801\u7f16\u8bd1\u6210\u4ec0\u4e48\u6837\u5b50\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='\"use strict\";\n\nfunction _asyncToGenerator(fn) {\n  return function() {\n    var gen = fn.apply(this, arguments);\n    return new Promise(function(resolve, reject) {\n      function step(key, arg) {\n        try {\n          var info = gen[key](arg);\n          var value = info.value;\n        } catch (error) {\n          reject(error);\n          return;\n        }\n        if (info.done) {\n          resolve(value);\n        } else {\n          return Promise.resolve(value).then(\n            function(value) {\n              step(\"next\", value);\n            },\n            function(err) {\n              step(\"throw\", err);\n            }\n          );\n        }\n      }\n      return step(\"next\");\n    });\n  };\n}\n\nvar fetchData = function fetchData(data) {\n  return new Promise(function(resolve) {\n    return setTimeout(resolve, 1000, data + 1);\n  });\n};\n\nvar fetchValue = (function() {\n  var _ref = _asyncToGenerator(\n    \/*#__PURE__*\/ regeneratorRuntime.mark(function _callee() {\n      var value1, value2, value3;\n      return regeneratorRuntime.wrap(\n        function _callee$(_context) {\n          while (1) {\n            switch ((_context.prev = _context.next)) {\n              case 0:\n                _context.next = 2;\n                return fetchData(1);\n\n              case 2:\n                value1 = _context.sent;\n                _context.next = 5;\n                return fetchData(value1);\n\n              case 5:\n                value2 = _context.sent;\n                _context.next = 8;\n                return fetchData(value2);\n\n              case 8:\n                value3 = _context.sent;\n\n                console.log(value3);\n\n              case 10:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        },\n        _callee,\n        this\n      );\n    })\n  );\n\n  return function fetchValue() {\n    return _ref.apply(this, arguments);\n  };\n})();\n\nfetchValue();'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-s\">\"use strict\"<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_asyncToGenerator<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">gen<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">reject<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">try<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">info<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">gen<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n          <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">catch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-s1\">reject<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n          <span class=\"pl-k\">return<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span>\n            <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n              <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n              <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"throw\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span>\n          <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n      <span class=\"pl-kos\">}<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-en\">fetchData<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">setTimeout<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">1000<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">fetchValue<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">_ref<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_asyncToGenerator<\/span><span class=\"pl-kos\">(<\/span>\n    <span class=\"pl-c\">\/*#__PURE__*\/<\/span> <span class=\"pl-s1\">regeneratorRuntime<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mark<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_callee<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value3<\/span><span class=\"pl-kos\">;<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">regeneratorRuntime<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">wrap<\/span><span class=\"pl-kos\">(<\/span>\n        <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_callee$<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">while<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">switch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prev<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n              <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">0<\/span>:\n                <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n              <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">2<\/span>:\n                <span class=\"pl-s1\">value1<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">5<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n              <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">5<\/span>:\n                <span class=\"pl-s1\">value2<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">8<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n              <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">8<\/span>:\n                <span class=\"pl-s1\">value3<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span><span class=\"pl-kos\">;<\/span>\n\n                <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value3<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n              <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">10<\/span>:\n              <span class=\"pl-k\">case<\/span> <span class=\"pl-s\">\"end\"<\/span>:\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">stop<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span>\n          <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n        <span class=\"pl-s1\">_callee<\/span><span class=\"pl-kos\">,<\/span>\n        <span class=\"pl-smi\">this<\/span>\n      <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-s1\">fetchValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">_ref<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">fetchValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">_asyncToGenerator<\/h2>\n<p dir=\"auto\">regeneratorRuntime \u76f8\u5173\u7684\u4ee3\u7801\u6211\u4eec\u5728 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/102\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/102\/hovercard\">\u300aES6 \u7cfb\u5217\u4e4b Babel \u5c06 Generator \u7f16\u8bd1\u6210\u4e86\u4ec0\u4e48\u6837\u5b50\u300b<\/a> \u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e86\uff0c\u8fd9\u6b21\u6211\u4eec\u91cd\u70b9\u6765\u770b\u770b _asyncToGenerator \u51fd\u6570\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='function _asyncToGenerator(fn) {\n  return function() {\n    var gen = fn.apply(this, arguments);\n    return new Promise(function(resolve, reject) {\n      function step(key, arg) {\n        try {\n          var info = gen[key](arg);\n          var value = info.value;\n        } catch (error) {\n          reject(error);\n          return;\n        }\n        if (info.done) {\n          resolve(value);\n        } else {\n          return Promise.resolve(value).then(\n            function(value) {\n              step(\"next\", value);\n            },\n            function(err) {\n              step(\"throw\", err);\n            }\n          );\n        }\n      }\n      return step(\"next\");\n    });\n  };\n}'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_asyncToGenerator<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">gen<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">reject<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">try<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">info<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">gen<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n          <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">catch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-s1\">reject<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n          <span class=\"pl-k\">return<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span>\n            <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n              <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n              <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"throw\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span>\n          <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n      <span class=\"pl-kos\">}<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u4ee5\u4e0a\u8fd9\u6bb5\u4ee3\u7801\u4e3b\u8981\u662f\u7528\u6765\u5b9e\u73b0 generator \u7684\u81ea\u52a8\u6267\u884c\u4ee5\u53ca\u8fd4\u56de Promise\u3002<\/p>\n<p dir=\"auto\">\u5f53\u6211\u4eec\u6267\u884c <code class=\"notranslate\">fetchValue()<\/code> \u7684\u65f6\u5019\uff0c\u6267\u884c\u7684\u5176\u5b9e\u5c31\u662f <code class=\"notranslate\">_asyncToGenerator<\/code> \u8fd4\u56de\u7684\u8fd9\u4e2a\u533f\u540d\u51fd\u6570\uff0c\u5728\u533f\u540d\u51fd\u6570\u4e2d\uff0c\u6211\u4eec\u6267\u884c\u4e86<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var gen = fn.apply(this, arguments);\">\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">gen<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u8fd9\u4e00\u6b65\u5c31\u76f8\u5f53\u4e8e\u6267\u884c Generator \u51fd\u6570\uff0c\u4e3e\u4e2a\u4f8b\u5b50\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"function* helloWorldGenerator() {\n  yield 'hello';\n  yield 'world';\n  return 'ending';\n}\n\nvar hw = helloWorldGenerator();\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">function<\/span><span class=\"pl-c1\">*<\/span> <span class=\"pl-s1\">helloWorldGenerator<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">yield<\/span> <span class=\"pl-s\">'hello'<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">yield<\/span> <span class=\"pl-s\">'world'<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s\">'ending'<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">hw<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">helloWorldGenerator<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\"><code class=\"notranslate\">var gen = fn.apply(this, arguments)<\/code> \u5c31\u76f8\u5f53\u4e8e <code class=\"notranslate\">var hw = helloWorldGenerator();<\/code>\uff0c\u8fd4\u56de\u7684 gen \u662f\u4e00\u4e2a\u5177\u6709 next()\u3001throw()\u3001return() \u65b9\u6cd5\u7684\u5bf9\u8c61\u3002<\/p>\n<p dir=\"auto\">\u7136\u540e\u6211\u4eec\u8fd4\u56de\u4e86\u4e00\u4e2a Promise \u5bf9\u8c61\uff0c\u5728 Promise \u4e2d\uff0c\u6211\u4eec\u6267\u884c\u4e86 step(&#8220;next&#8221;)\uff0cstep \u51fd\u6570\u4e2d\u4f1a\u6267\u884c\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"try {\n  var info = gen[key](arg);\n  var value = info.value;\n} catch (error) {\n  reject(error);\n  return;\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">try<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">info<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">gen<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">catch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">reject<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">return<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">step(&#8220;next&#8221;) \u5c31\u76f8\u5f53\u4e8e <code class=\"notranslate\">var info = gen.next()<\/code>\uff0c\u8fd4\u56de\u7684 info \u5bf9\u8c61\u662f\u4e00\u4e2a\u5177\u6709 value \u548c done \u5c5e\u6027\u7684\u5bf9\u8c61\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{value: Promise, done: false}\">\n<pre class=\"notranslate\"><span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">value<\/span>: <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">done<\/span>: <span class=\"pl-c1\">false<\/span><span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u63a5\u4e0b\u6765\u53c8\u4f1a\u6267\u884c\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='if (info.done) {\n  resolve(value);\n} else {\n  return Promise.resolve(value).then(\n    function(value) {\n      step(\"next\", value);\n    },\n    function(err) {\n      step(\"throw\", err);\n    }\n  );\n}'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span>\n    <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n    <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"throw\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">value \u6b64\u65f6\u662f\u4e00\u4e2a Promise\uff0cPromise.resolve(value) \u4f9d\u7136\u4f1a\u8fd4\u56de\u8fd9\u4e2a Promise\uff0c\u6211\u4eec\u7ed9\u8fd9\u4e2a Promise \u6dfb\u52a0\u4e86\u4e00\u4e2a then \u51fd\u6570\uff0c\u7528\u4e8e\u5728 Promise \u6709\u7ed3\u679c\u65f6\u6267\u884c\uff0c\u6709\u7ed3\u679c\u65f6\u53c8\u4f1a\u6267\u884c <code class=\"notranslate\">step(\"next\", value)<\/code>\uff0c\u4ece\u800c\u4f7f\u5f97 Generator \u7ee7\u7eed\u6267\u884c\uff0c\u76f4\u5230 <code class=\"notranslate\">info.done<\/code> \u4e3a true\uff0c\u624d\u4f1a <code class=\"notranslate\">resolve(value)<\/code>\u3002<\/p>\n<h2 dir=\"auto\">\u4e0d\u5b8c\u6574\u4f46\u53ef\u7528\u7684\u4ee3\u7801<\/h2>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='(function() {\n    var ContinueSentinel = {};\n\n    var mark = function(genFun) {\n        var generator = Object.create({\n            next: function(arg) {\n                return this._invoke(\"next\", arg);\n            }\n        });\n        genFun.prototype = generator;\n        return genFun;\n    };\n\n    function wrap(innerFn, outerFn, self) {\n        var generator = Object.create(outerFn.prototype);\n\n        var context = {\n            done: false,\n            method: \"next\",\n            next: 0,\n            prev: 0,\n            sent: undefined,\n            abrupt: function(type, arg) {\n                var record = {};\n                record.type = type;\n                record.arg = arg;\n\n                return this.complete(record);\n            },\n            complete: function(record, afterLoc) {\n                if (record.type === \"return\") {\n                    this.rval = this.arg = record.arg;\n                    this.method = \"return\";\n                    this.next = \"end\";\n                }\n\n                return ContinueSentinel;\n            },\n            stop: function() {\n                this.done = true;\n                return this.rval;\n            }\n        };\n\n        generator._invoke = makeInvokeMethod(innerFn, context);\n\n        return generator;\n    }\n\n    function makeInvokeMethod(innerFn, context) {\n        var state = \"start\";\n\n        return function invoke(method, arg) {\n            if (state === \"completed\") {\n                return { value: undefined, done: true };\n            }\n\n            context.method = method;\n            context.arg = arg;\n\n            while (true) {\n                state = \"executing\";\n\n                if (context.method === \"next\") {\n                    context.sent = context._sent = context.arg;\n                }\n\n                var record = {\n                    type: \"normal\",\n                    arg: innerFn.call(self, context)\n                };\n\n                if (record.type === \"normal\") {\n                    state = context.done ? \"completed\" : \"yield\";\n\n                    if (record.arg === ContinueSentinel) {\n                        continue;\n                    }\n\n                    return {\n                        value: record.arg,\n                        done: context.done\n                    };\n                }\n            }\n        };\n    }\n\n    window.regeneratorRuntime = {};\n\n    regeneratorRuntime.wrap = wrap;\n    regeneratorRuntime.mark = mark;\n})();\n\n\"use strict\";\n\nfunction _asyncToGenerator(fn) {\n    return function() {\n        var gen = fn.apply(this, arguments);\n        return new Promise(function(resolve, reject) {\n            function step(key, arg) {\n                try {\n                    var info = gen[key](arg);\n                    var value = info.value;\n                } catch (error) {\n                    reject(error);\n                    return;\n                }\n                if (info.done) {\n                    resolve(value);\n                } else {\n                    return Promise.resolve(value).then(\n                        function(value) {\n                            step(\"next\", value);\n                        },\n                        function(err) {\n                            step(\"throw\", err);\n                        }\n                    );\n                }\n            }\n            return step(\"next\");\n        });\n    };\n}\n\nvar fetchData = function fetchData(data) {\n    return new Promise(function(resolve) {\n        return setTimeout(resolve, 1000, data + 1);\n    });\n};\n\nvar fetchValue = (function() {\n    var _ref = _asyncToGenerator(\n        \/*#__PURE__*\/\n        regeneratorRuntime.mark(function _callee() {\n            var value1, value2, value3;\n            return regeneratorRuntime.wrap(\n                function _callee$(_context) {\n                    while (1) {\n                        switch ((_context.prev = _context.next)) {\n                            case 0:\n                                _context.next = 2;\n                                return fetchData(1);\n\n                            case 2:\n                                value1 = _context.sent;\n                                _context.next = 5;\n                                return fetchData(value1);\n\n                            case 5:\n                                value2 = _context.sent;\n                                _context.next = 8;\n                                return fetchData(value2);\n\n                            case 8:\n                                value3 = _context.sent;\n\n                                console.log(value3);\n\n                            case 10:\n                            case \"end\":\n                                return _context.stop();\n                        }\n                    }\n                },\n                _callee,\n                this\n            );\n        })\n    );\n\n    return function fetchValue() {\n        return _ref.apply(this, arguments);\n    };\n})();\n\nfetchValue();'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-v\">ContinueSentinel<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-en\">mark<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">genFun<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">generator<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Object<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">create<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-en\">next<\/span>: <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">_invoke<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-s1\">genFun<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">generator<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">genFun<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">wrap<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">innerFn<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">outerFn<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">generator<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Object<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">create<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">outerFn<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">context<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-c1\">done<\/span>: <span class=\"pl-c1\">false<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-c1\">method<\/span>: <span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-c1\">next<\/span>: <span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-c1\">prev<\/span>: <span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-c1\">sent<\/span>: <span class=\"pl-c1\">undefined<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-en\">abrupt<\/span>: <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">type<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">record<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">type<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">type<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">;<\/span>\n\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">complete<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-en\">complete<\/span>: <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">afterLoc<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">type<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-s\">\"return\"<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">rval<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span><span class=\"pl-kos\">;<\/span>\n                    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">method<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">\"return\"<\/span><span class=\"pl-kos\">;<\/span>\n                    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">\"end\"<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">ContinueSentinel<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n            <span class=\"pl-en\">stop<\/span>: <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">rval<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n        <span class=\"pl-s1\">generator<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_invoke<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">makeInvokeMethod<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">innerFn<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">generator<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">makeInvokeMethod<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">innerFn<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">state<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">\"start\"<\/span><span class=\"pl-kos\">;<\/span>\n\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">invoke<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">method<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">state<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-s\">\"completed\"<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">value<\/span>: <span class=\"pl-c1\">undefined<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">done<\/span>: <span class=\"pl-c1\">true<\/span> <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span>\n\n            <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">method<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">method<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">;<\/span>\n\n            <span class=\"pl-k\">while<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-s1\">state<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">\"executing\"<\/span><span class=\"pl-kos\">;<\/span>\n\n                <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">method<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_sent<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n\n                <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">record<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-c1\">type<\/span>: <span class=\"pl-s\">\"normal\"<\/span><span class=\"pl-kos\">,<\/span>\n                    <span class=\"pl-c1\">arg<\/span>: <span class=\"pl-s1\">innerFn<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">call<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">)<\/span>\n                <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n                <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">type<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-s\">\"normal\"<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-s1\">state<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span> ? <span class=\"pl-s\">\"completed\"<\/span> : <span class=\"pl-s\">\"yield\"<\/span><span class=\"pl-kos\">;<\/span>\n\n                    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-v\">ContinueSentinel<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                        <span class=\"pl-k\">continue<\/span><span class=\"pl-kos\">;<\/span>\n                    <span class=\"pl-kos\">}<\/span>\n\n                    <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">{<\/span>\n                        <span class=\"pl-c1\">value<\/span>: <span class=\"pl-s1\">record<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">arg<\/span><span class=\"pl-kos\">,<\/span>\n                        <span class=\"pl-c1\">done<\/span>: <span class=\"pl-s1\">context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span>\n                    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n            <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">regeneratorRuntime<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-s1\">regeneratorRuntime<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">wrap<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">wrap<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-s1\">regeneratorRuntime<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">mark<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">mark<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s\">\"use strict\"<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_asyncToGenerator<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">gen<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">fn<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">reject<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">try<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">info<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">gen<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arg<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">catch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-s1\">reject<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                    <span class=\"pl-k\">return<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n                <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">info<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">done<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span>\n                        <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                            <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n                        <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                            <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"throw\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                        <span class=\"pl-kos\">}<\/span>\n                    <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n            <span class=\"pl-kos\">}<\/span>\n            <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">step<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"next\"<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-en\">fetchData<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">setTimeout<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resolve<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">1000<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">fetchValue<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">_ref<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_asyncToGenerator<\/span><span class=\"pl-kos\">(<\/span>\n        <span class=\"pl-c\">\/*#__PURE__*\/<\/span>\n        <span class=\"pl-s1\">regeneratorRuntime<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mark<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_callee<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value3<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">regeneratorRuntime<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">wrap<\/span><span class=\"pl-kos\">(<\/span>\n                <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">_callee$<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-k\">while<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                        <span class=\"pl-k\">switch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prev<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                            <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">0<\/span>:\n                                <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">;<\/span>\n                                <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n                            <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">2<\/span>:\n                                <span class=\"pl-s1\">value1<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span><span class=\"pl-kos\">;<\/span>\n                                <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">5<\/span><span class=\"pl-kos\">;<\/span>\n                                <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n                            <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">5<\/span>:\n                                <span class=\"pl-s1\">value2<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span><span class=\"pl-kos\">;<\/span>\n                                <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">next<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">8<\/span><span class=\"pl-kos\">;<\/span>\n                                <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n                            <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">8<\/span>:\n                                <span class=\"pl-s1\">value3<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">sent<\/span><span class=\"pl-kos\">;<\/span>\n\n                                <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value3<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n                            <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">10<\/span>:\n                            <span class=\"pl-k\">case<\/span> <span class=\"pl-s\">\"end\"<\/span>:\n                                <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">_context<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">stop<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n                        <span class=\"pl-kos\">}<\/span>\n                    <span class=\"pl-kos\">}<\/span>\n                <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n                <span class=\"pl-s1\">_callee<\/span><span class=\"pl-kos\">,<\/span>\n                <span class=\"pl-smi\">this<\/span>\n            <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-s1\">fetchValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">_ref<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">fetchValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u8bf7\u539f\u8c05\u6211\u6c34\u4e86\u4e00\u7bc7\u6587\u7ae0\u2026\u2026<\/p>\n<h2 dir=\"auto\">ES6 \u7cfb\u5217<\/h2>\n<p dir=\"auto\">ES6 \u7cfb\u5217\u76ee\u5f55\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\">https:\/\/github.com\/mqyqingfeng\/Blog<\/a><\/p>\n<p dir=\"auto\">ES6 \u7cfb\u5217\u9884\u8ba1\u5199\u4e8c\u5341\u7bc7\u5de6\u53f3\uff0c\u65e8\u5728\u52a0\u6df1 ES6 \u90e8\u5206\u77e5\u8bc6\u70b9\u7684\u7406\u89e3\uff0c\u91cd\u70b9\u8bb2\u89e3\u5757\u7ea7\u4f5c\u7528\u57df\u3001\u6807\u7b7e\u6a21\u677f\u3001\u7bad\u5934\u51fd\u6570\u3001Symbol\u3001Set\u3001Map \u4ee5\u53ca Promise \u7684\u6a21\u62df\u5b9e\u73b0\u3001\u6a21\u5757\u52a0\u8f7d\u65b9\u6848\u3001\u5f02\u6b65\u5904\u7406\u7b49\u5185\u5bb9\u3002<\/p>\n<\/td>\n<p>\u6587\u7ae0\u8f6c\u8f7d\u81ea<a href='https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/103'>https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/103<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u672c\u6587\u5c31\u662f\u7b80\u5355\u4ecb\u7ecd\u4e0b Async \u8bed\u6cd5\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u3002 Async const fetchData = (data) =&gt; new Promise((r&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.lccc.top\/?p=1360\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1360","post","type-post","status-publish","format-standard","hentry","category-learn"],"_links":{"self":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1360"}],"collection":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1360"}],"version-history":[{"count":1,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1360\/revisions"}],"predecessor-version":[{"id":1453,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1360\/revisions\/1453"}],"wp:attachment":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}