{"id":43945,"date":"2023-12-11T15:01:23","date_gmt":"2023-12-11T07:01:23","guid":{"rendered":"https:\/\/wx.kaifamiao.info\/?p=43945"},"modified":"2023-12-11T15:01:23","modified_gmt":"2023-12-11T07:01:23","slug":"promisegeneratorasync%e7%9a%84%e4%bd%bf%e7%94%a8%ef%bc%9f-2","status":"publish","type":"post","link":"http:\/\/wx.kaifamiao.info\/index.php\/2023\/12\/11\/promisegeneratorasync%e7%9a%84%e4%bd%bf%e7%94%a8%ef%bc%9f-2\/","title":{"rendered":"promise+Generator+Async\u7684\u4f7f\u7528\uff1f"},"content":{"rendered":"<p>&#8220;`&#8221;                    \u53c2\u8003\u56de\u7b54\uff1a<\/p>\n<p>Promise<\/p>\n<p>\u89e3\u51b3\u7684\u95ee\u9898:\u56de\u8c03\u5730\u72f1<\/p>\n<p>Promise\u89c4\u8303:<\/p>\n<p>promise\u6709\u4e09\u79cd\u72b6\u6001\uff0c\u7b49\u5f85\uff08pending\uff09\u3001\u5df2\u5b8c\u6210\uff08fulfilled\/resolved\uff09\u3001\u5df2\u62d2\u7edd\uff08rejected\uff09.Promise\u7684\u72b6\u6001\u53ea\u80fd\u4ece\u201c\u7b49\u5f85\u201d\u8f6c\u5230\u201c\u5b8c\u6210\u201d\u6216\u8005\u201c\u62d2\u7edd\u201d\uff0c\u4e0d\u80fd\u9006\u5411\u8f6c\u6362\uff0c\u540c\u65f6\u201c\u5b8c\u6210\u201d\u548c\u201c\u62d2\u7edd\u201d\u4e5f\u4e0d\u80fd\u76f8\u4e92\u8f6c\u6362.<\/p>\n<p>promise \u5fc5\u987b\u63d0\u4f9b\u4e00\u4e2a then\u65b9\u6cd5\u4ee5\u8bbf\u95ee\u5176\u5f53\u524d\u503c\u3001\u7ec8\u503c\u548c\u636e\u56e0\u3002promise.then(resolve, reject),resolve \u548c reject\u90fd\u662f\u53ef\u9009\u53c2\u6570\u3002\u5982\u679c resolve \u6216reject \u4e0d\u662f\u51fd\u6570\uff0c\u5176\u5fc5\u987b\u88ab\u5ffd\u7565.<\/p>\n<p>then \u65b9\u6cd5\u5fc5\u987b\u8fd4\u56de\u4e00\u4e2a promise \u5bf9\u8c61.<\/p>\n<p>\u4f7f\u7528:<\/p>\n<p>\u5b9e\u4f8b\u5316promise\u5bf9\u8c61\u9700\u8981\u4f20\u5165\u51fd\u6570(\u5305\u542b\u4e24\u4e2a\u53c2\u6570),resolve\u548creject,\u5185\u90e8\u786e\u5b9a\u72b6\u6001.resolve\u548creject\u51fd\u6570\u53ef\u4ee5\u4f20\u5165\u53c2\u6570\u5728\u56de\u8c03\u51fd\u6570\u4e2d\u4f7f\u7528.<br \/>\nresolve\u548creject\u90fd\u662f\u51fd\u6570,\u4f20\u5165\u7684\u53c2\u6570\u5728then\u7684\u56de\u8c03\u51fd\u6570\u4e2d\u63a5\u6536.<\/p>\n<p>&lt;pre&gt;&lt;code&gt;var promise = new Promise(function(resolve, reject) {<br \/>\nsetTimeout(function(){<br \/>\n&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>resolve(&#039;\u597d\u54c8\u54c8\u54c8\u54c8&#039;);<\/p>\n<p>&lt;pre&gt;&lt;code&gt;});<br \/>\n});<br \/>\npromise.then(function(val){<br \/>\nconsole.log(val)<br \/>\n})<br \/>\n&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>then\u63a5\u6536\u4e24\u4e2a\u51fd\u6570,\u5206\u522b\u5bf9\u5e94resolve\u548creject\u72b6\u6001\u7684\u56de\u8c03,\u51fd\u6570\u4e2d\u63a5\u6536\u5b9e\u4f8b\u5316\u65f6\u4f20\u5165\u7684\u53c2\u6570.<\/p>\n<p>&lt;pre&gt;&lt;code&gt;promise.then(val=&gt;{<br \/>\n\/\/resolved<br \/>\n},reason=&gt;{<br \/>\n\/\/rejected<br \/>\n})<br \/>\n&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>catch\u76f8\u5f53\u4e8e.then(null, rejection)<br \/>\n\u5f53then\u4e2d\u6ca1\u6709\u4f20\u5165rejection\u65f6,\u9519\u8bef\u4f1a\u5192\u6ce1\u8fdb\u5165catch\u51fd\u6570\u4e2d,\u82e5\u4f20\u5165\u4e86rejection,\u5219\u9519\u8bef\u4f1a\u88abrejection\u6355\u83b7,\u800c\u4e14\u4e0d\u4f1a\u8fdb\u5165catch.\u6b64\u5916,then\u4e2d\u7684\u56de\u8c03\u51fd\u6570\u4e2d\u53d1\u751f\u7684\u9519\u8bef\u53ea\u4f1a\u5728\u4e0b\u4e00\u7ea7\u7684then\u4e2d\u88ab\u6355\u83b7,\u4e0d\u4f1a\u5f71\u54cd\u8be5promise\u7684\u72b6\u6001.<\/p>\n<p>&lt;pre&gt;&lt;code&gt;new Promise((resolve,reject)=&gt;{<br \/>\nthrow new Error(&#039;\u9519\u8bef&#039;)<br \/>\n}).then(null,(err)=&gt;{<br \/>\nconsole.log(err,1);\/\/\u6b64\u5904\u6355\u83b7<br \/>\n}).catch((err)=&gt;{<br \/>\nconsole.log(err,2);<br \/>\n});<br \/>\n\/\/ \u5bf9\u6bd4<br \/>\nnew Promise((resolve,reject)=&gt;{<br \/>\nthrow new Error(&#039;\u9519\u8bef&#039;)<br \/>\n}).then(null,null).catch((err)=&gt;{<br \/>\nconsole.log(err,2);\/\/\u6b64\u5904\u6355\u83b7<br \/>\n});<br \/>\n\/\/ \u9519\u8bef\u793a\u4f8b<br \/>\n    new Promise((resolve,reject)=&gt;{<br \/>\n    resolve(&#039;\u6b63\u5e38&#039;);<br \/>\n    }).then((val)=&gt;{<br \/>\nthrow new Error(&#039;\u56de\u8c03\u51fd\u6570\u4e2d\u9519\u8bef&#039;)<br \/>\n    },(err)=&gt;{<br \/>\n    console.log(err,1);<br \/>\n    }).then(null,(err)=&gt;{<br \/>\nconsole.log(err,2);\/\/\u6b64\u5904\u6355\u83b7,\u4e5f\u53ef\u7528catch<br \/>\n});<\/p>\n<p>&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>\u00a0<\/p>\n<p>\u4e24\u8005\u4e0d\u7b49\u4ef7\u7684\u60c5\u51b5:<br \/>\n\u6b64\u65f6\uff0ccatch\u6355\u83b7\u7684\u5e76\u4e0d\u662fp1\u7684\u9519\u8bef\uff0c\u800c\u662fp2\u7684\u9519\u8bef\uff0c<\/p>\n<p>&lt;pre&gt;&lt;code&gt;p1().then(res=&gt;{<br \/>\nreturn p2()\/\/p2\u8fd4\u56de\u4e00\u4e2apromise\u5bf9\u8c61<br \/>\n}).catch(err=&gt; console.log(err))<\/p>\n<p>&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>\u4e00\u4e2a\u9519\u8bef\u6355\u83b7\u7684\u9519\u8bef\u7528\u4f8b:<br \/>\n\u8be5\u51fd\u6570\u8c03\u7528\u4e2d\u5373\u4f7f\u53d1\u751f\u4e86\u9519\u8bef\u4f9d\u7136\u4f1a\u8fdb\u5165then\u4e2d\u7684resolve\u7684\u56de\u8c03\u51fd\u6570,\u56e0\u4e3a\u51fd\u6570p1\u4e2d\u5b9e\u4f8b\u5316promise\u5bf9\u8c61\u65f6\u5df2\u7ecf\u8c03\u7528\u4e86catch,\u82e5\u53d1\u751f\u9519\u8bef\u4f1a\u8fdb\u5165catch\u4e2d,\u6b64\u65f6\u4f1a\u8fd4\u56de\u4e00\u4e2a\u65b0\u7684promise,\u56e0\u6b64\u5373\u4f7f\u53d1\u751f\u9519\u8bef\u4f9d\u7136\u4f1a\u8fdb\u5165p1\u51fd\u6570\u7684then\u94fe\u4e2d\u7684resolve\u56de\u8c03\u51fd\u6570.<\/p>\n<p>&lt;pre&gt;&lt;code&gt;function p1(val){<br \/>\nreturn new Promise((resolve,reject)=&gt;{<br \/>\nif(val){<br \/>\nvar len = val.length;\/\/\u4f20\u5165null\u4f1a\u53d1\u751f\u9519\u8bef,\u8fdb\u5165catch\u6355\u83b7\u9519\u8bef<br \/>\n    resolve(len);<br \/>\n    }else{<br \/>\n    reject();<br \/>\n    }<br \/>\n    }).catch((err)=&gt;{<br \/>\n    console.log(err)<br \/>\n    })<br \/>\n};<br \/>\n    p1(null).then((len)=&gt;{<br \/>\n    console.log(len,&#039;resolved&#039;);<br \/>\n    },()=&gt;{<br \/>\n    console.log(&#039;rejected&#039;);<br \/>\n    }).catch((err)=&gt;{<br \/>\n    console.log(err,&#039;catch&#039;);<br \/>\n})<\/p>\n<p>&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>Promise\u56de\u8c03\u94fe:<\/p>\n<p>promise\u80fd\u591f\u5728\u56de\u8c03\u51fd\u6570\u91cc\u9762\u4f7f\u7528 return \u548c throw\uff0c \u6240\u4ee5\u5728then\u4e2d\u53ef\u4ee5return\u51fa\u4e00\u4e2apromise\u5bf9\u8c61\u6216\u5176\u4ed6\u503c\uff0c\u4e5f\u53ef\u4ee5throw\u51fa\u4e00\u4e2a\u9519\u8bef\u5bf9\u8c61\uff0c\u4f46\u5982\u679c\u6ca1\u6709return\uff0c\u5c06\u9ed8\u8ba4\u8fd4\u56de undefined\uff0c\u90a3\u4e48\u540e\u9762\u7684then\u4e2d\u7684\u56de\u8c03\u53c2\u6570\u63a5\u6536\u5230\u7684\u5c06\u662fundefined.<\/p>\n<p>&lt;pre&gt;&lt;code&gt;function p1(val){<br \/>\nreturn new Promise((resolve,reject)=&gt;{<br \/>\nval==1?resolve(1):reject()<br \/>\n})<br \/>\n};<br \/>\nfunction p2(val){<br \/>\nreturn new Promise((resolve,reject)=&gt;{<br \/>\nval==2?resolve(2):reject();<br \/>\n})<br \/>\n};<br \/>\nlet promimse = new Promise(function(resolve,reject){<br \/>\nresolve(1)<br \/>\n})<br \/>\n.then(function(data1) {<br \/>\nreturn p1(data1)\/\/\u5982\u679c\u53bb\u6389return,\u5219\u8fd4\u56deundefined\u800c\u4e0d\u662fp1\u7684\u8fd4\u56de\u503c,\u4f1a\u5bfc\u81f4\u62a5\u9519<\/p>\n<p>    })<br \/>\n    .then(function(data2){<br \/>\n    return p2(data2+1)<br \/>\n    })<br \/>\n    .then(res=&gt;console.log(res))<\/p>\n<p>&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>Generator\u51fd\u6570\uff1a<\/p>\n<p>generator\u51fd\u6570\u4f7f\u7528:<br \/>\n1\u3001\u5206\u6bb5\u6267\u884c\uff0c\u53ef\u4ee5\u6682\u505c<\/p>\n<p>2\u3001\u53ef\u4ee5\u63a7\u5236\u9636\u6bb5\u548c\u6bcf\u4e2a\u9636\u6bb5\u7684\u8fd4\u56de\u503c<br \/>\n3\u3001\u53ef\u4ee5\u77e5\u9053\u662f\u5426\u6267\u884c\u5230\u7ed3\u5c3e<\/p>\n<p>&lt;pre&gt;&lt;code&gt;function* g() {<br \/>\nvar o = 1;<br \/>\nyield o++;<br \/>\nyield o++;<br \/>\n}<br \/>\nvar gen = g();<br \/>\nconsole.log(gen.next()); \/\/  Object {value: 1, done: false}<br \/>\nvar xxx = g();<br \/>\nconsole.log(gen.next()); \/\/ Object {value: 2, done: false}<br \/>\nconsole.log(xxx.next()); \/\/ Object {value: 1, done: false}<br \/>\nconsole.log(gen.next()); \/\/ Object {value: undefined, done: true}<br \/>\n&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>generator\u548c\u5f02\u6b65\u63a7\u5236:<br \/>\n\u5229\u7528Generator\u51fd\u6570\u7684\u6682\u505c\u6267\u884c\u7684\u6548\u679c\uff0c\u53ef\u4ee5\u628a\u5f02\u6b65\u64cd\u4f5c\u5199\u5728yield\u8bed\u53e5\u91cc\u9762\uff0c\u7b49\u5230\u8c03\u7528next\u65b9\u6cd5\u65f6\u518d\u5f80\u540e\u6267\u884c\u3002\u8fd9\u5b9e\u9645\u4e0a\u7b49\u540c\u4e8e\u4e0d\u9700\u8981\u5199\u56de\u8c03\u51fd\u6570\u4e86\uff0c\u56e0\u4e3a\u5f02\u6b65\u64cd\u4f5c\u7684\u540e\u7eed\u64cd\u4f5c\u53ef\u4ee5\u653e\u5728yield\u8bed\u53e5\u4e0b\u9762\uff0c\u53cd\u6b63\u8981\u7b49\u5230\u8c03\u7528next\u65b9\u6cd5\u65f6\u518d\u6267\u884c\u3002\u6240\u4ee5\uff0cGenerator\u51fd\u6570\u7684\u4e00\u4e2a\u91cd\u8981\u5b9e\u9645\u610f\u4e49\u5c31\u662f\u7528\u6765\u5904\u7406\u5f02\u6b65\u64cd\u4f5c\uff0c\u6539\u5199\u56de\u8c03\u51fd\u6570\u3002<\/p>\n<p>async\u548c\u5f02\u6b65:<\/p>\n<p>\u7528\u6cd5:<\/p>\n<p>async \u8868\u793a\u8fd9\u662f\u4e00\u4e2aasync\u51fd\u6570\uff0cawait\u53ea\u80fd\u7528\u5728\u8fd9\u4e2a\u51fd\u6570\u91cc\u9762\u3002<\/p>\n<p>await \u8868\u793a\u5728\u8fd9\u91cc\u7b49\u5f85\u5f02\u6b65\u64cd\u4f5c\u8fd4\u56de\u7ed3\u679c\uff0c\u518d\u7ee7\u7eed\u6267\u884c\u3002<\/p>\n<p>await \u540e\u4e00\u822c\u662f\u4e00\u4e2apromise\u5bf9\u8c61<\/p>\n<p>\u793a\u4f8b:async\u7528\u4e8e\u5b9a\u4e49\u4e00\u4e2a\u5f02\u6b65\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u8fd4\u56de\u4e00\u4e2aPromise\u3002<br \/>\n\u5982\u679casync\u51fd\u6570\u8fd4\u56de\u7684\u662f\u4e00\u4e2a\u540c\u6b65\u7684\u503c\uff0c\u8fd9\u4e2a\u503c\u5c06\u88ab\u5305\u88c5\u6210\u4e00\u4e2a\u7406\u89e3resolve\u7684Promise\uff0c\u7b49\u540c\u4e8ereturn Promise.resolve(value)\u3002<\/p>\n<p>await\u7528\u4e8e\u4e00\u4e2a\u5f02\u6b65\u64cd\u4f5c\u4e4b\u524d\uff0c\u8868\u793a\u8981\u201c\u7b49\u5f85\u201d\u8fd9\u4e2a\u5f02\u6b65\u64cd\u4f5c\u7684\u8fd4\u56de\u503c\u3002await\u4e5f\u53ef\u4ee5\u7528\u4e8e\u4e00\u4e2a\u540c\u6b65\u7684\u503c\u3002<\/p>\n<p>&lt;pre&gt;&lt;code&gt;let timer = async function timer(){<br \/>\nreturn new Promise((resolve,reject) =&gt; {<br \/>\nsetTimeout(() =&gt; {<br \/>\nresolve(&#039;500&#039;);<br \/>\n},500);<br \/>\n});<br \/>\n}<br \/>\ntimer().then(result =&gt; {<br \/>\nconsole.log(result);  \/\/500<br \/>\n}).catch(err =&gt; {<br \/>\nconsole.log(err.message);<br \/>\n});<br \/>\n\/\/\u8fd4\u56de\u4e00\u4e2a\u540c\u6b65\u7684\u503c<br \/>\nlet sayHi = async function sayHi(){<br \/>\nlet hi = await &#039;hello world&#039;;<br \/>\nreturn hi;  \/\/\u7b49\u540c\u4e8ereturn Promise.resolve(hi);<br \/>\n}<br \/>\nsayHi().then(result =&gt; {<br \/>\nconsole.log(result);<br \/>\n});<\/p>\n<p>&lt;\/code&gt;&lt;\/pre&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;pre&gt;&lt;code&gt;            &quot;&#8220;`<br \/>\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;`&#8221; \u53c2\u8003\u56de\u7b54\uff1a Promise \u89e3\u51b3\u7684\u95ee\u9898:\u56de\u8c03\u5730\u72f1 Promise\u89c4\u8303: pro [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-43945","post","type-post","status-publish","format-standard","hentry","category-c"],"_links":{"self":[{"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/posts\/43945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/comments?post=43945"}],"version-history":[{"count":1,"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/posts\/43945\/revisions"}],"predecessor-version":[{"id":43946,"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/posts\/43945\/revisions\/43946"}],"wp:attachment":[{"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/media?parent=43945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/categories?post=43945"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wx.kaifamiao.info\/index.php\/wp-json\/wp\/v2\/tags?post=43945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}