<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[刘新修]]></title> 
<link>http://pic1.liuxinxiu.com:80/index.php</link> 
<description><![CDATA[刘新修的个人博客 (Liuxinxiu'S Blog)]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[刘新修]]></copyright>
<item>
<link>http://pic1.liuxinxiu.com:80/s//</link>
<title><![CDATA[co最简版实现，学习generator amp; co]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[NodeJs平台]]></category>
<pubDate>Wed, 17 May 2017 09:25:46 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s//</guid> 
<description>
<![CDATA[ 
	<p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">看了co的源码 比较难懂 了解了其原理后实现了一个最简版本https://github.com/yucong/simple-co 希望对想学习的tx有帮助～ yeild后面只支持thunk，co本身也是一个thunk</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">核心代码：</span></font><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">function co(generator) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;return function(fn) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;</span>var gen = generator();</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;</span>function next(err, result) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;</span>if(err)&#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>return fn(err);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;</span>&#125;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;</span>var step = gen.next(result);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;</span>if (!step.done) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>step.value(next);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;</span>&#125; else &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>fn(null, step.value);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;&nbsp;&nbsp;</span>&#125;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;</span>&#125;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;</span>next();</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp; &#125;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&#125;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">用法：</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">var co = require('./co');</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">// wrap the function to thunk</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">function readFile(filename) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;return function(callback) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px;"><span class="Apple-tab-span" style="white-space:pre">&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;require('fs').readFile(filename, 'utf8', callback);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;&#125;;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&#125;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">co(function * () &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;var file1 = yield readFile('./file/a.txt');</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;var file2 = yield readFile('./file/b.txt');</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;console.log(file1);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;console.log(file2);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;return 'done';</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&#125;)(function(err, result) &#123;</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;console.log(result)</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">&#125;);</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">会打印出：</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">content in a.txt</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">content in b.txt</span></font></p><p><font color="#333333" face="Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, STHeiti, sans-serif"><span style="font-size: 15px; white-space: pre-wrap;">done</span></font></p><p>================================</p><p><strong>generator_co: &nbsp;</strong><a href="http://liuxinxiu.com/generator_co/"><strong>http://liuxinxiu.com/generator_co/</strong></a></p>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s//#blogcomment</link>
<title><![CDATA[[评论] co最简版实现，学习generator amp; co]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>