我的Promise对象初识与进阶

来源:互联网 发布:linux和windows换行符 编辑:程序博客网 时间:2024/05/17 15:22
<div class="Layout av-cardBackground"><div class="Layout-navbarHolder"><header class="Navbar ScrollBackFixed"><div class="Navbar-logo-wrapper"><a class="Navbar-logo icon-ic_zhihu_logo" href="//www.zhihu.com" target="_blank" rel="noopener" aria-label="知乎首页"></a></div><div class="Navbar-functionality"><a class="Navbar-write" href="/write"><i class="icon icon-ic_nav_new"></i><!-- react-text: 10 -->写文章<!-- /react-text --></a><button class="Button Navbar-loginButon Button--blue" type="button">登录</button></div></header></div><!-- react-empty: 12 --><div></div><div class="Layout-main av-paddingBottom av-bodyFont Layout-titleImage--normal" data-za-module="PostItem"><div class="PostIndex-header av-paddingTop av-card"><div class="TitleImage"><img alt="我的Promise对象初识与进阶" src="https://pic2.zhimg.com/v2-09b5dffffe94bf7c2f9c564d90769101_r.png" class="TitleImage-imagePure TitleImage-imagePure--fixed" height="275px"></div><h1 class="PostIndex-title av-paddingSide av-titleFont">我的Promise对象初识与进阶</h1><div class="PostIndex-author"><a href="https://www.zhihu.com/people/li-cheng-28-62" target="_blank"><img class="Avatar PostIndex-authorAvatar Avatar--xs" alt="Leecen" src="https://pic3.zhimg.com/v2-43592cfe5a17d4dbc8303a8fe146c5e2_xs.jpg" srcset="https://pic3.zhimg.com/v2-43592cfe5a17d4dbc8303a8fe146c5e2_l.jpg 2x"></a><a href="https://www.zhihu.com/people/li-cheng-28-62" target="_blank" class="PostIndex-authorName">Leecen</a><!-- react-empty: 23 --><span class="Bull"></span><div class="HoverTitle" data-hover-title="2017 年 5月 8 日星期一晚上 10 点 47 分"><time datetime="2017-05-08T14:47:11.000Z">1 天前</time></div></div></div><div class="RichText PostIndex-content av-paddingSide av-card">ES6的发布,为我们带来了Promise,解决了以往js开发中遇到了回调黑洞的问题,让return 与throw等特权重新回到我们的手中;<p>Promise对象的使用很简单,提供了很多统一的API,属性以及方法的识别度很高;</p><p>本文是自己学习Promise的一些总结和坑,分享一下,主要参考MDN;</p><p><b>MDN</b></p><blockquote><p>Promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时可能是未知的;<br>它允许你为异步代码执行结果的成功和失败分别绑定相应的处理方法(handlers )。<br> 这让异步方法可以像同步方法那样返回值,但是并非立即返回执行的结果,因为毕竟执行的是异步代码;<br>因此,它会返回一个Promise对象,如前所说,它是一个代理的对象,代理了最终返回的值,可以在后期使用</p></blockquote>初始化Promise,构造函数的参数:<p>var promise = new Promise(executor );</p><p>executor是一个可执行函数,包含两个参数,resolve与reject,executor函数会在Promise对象初始化执行,并返回一个promise实力对象,resolve句柄用于解决异步结果正确时候处理promise,而reject句柄用于解决异步结果出错时处理promise;启动异步处理之后,成功的则交给resolve,失败抛错则会交给reject处理;<br></p><p>在异步处理的过程中,promise一共会有三种状态:</p><ul><li><em>pending</em>: 初始状态,未履行或拒绝。</li><li><em>fulfilled</em>: 意味着操作成功完成。</li><li><em>rejected</em>: 意味着操作失败。</li></ul><p>我们通过初始化返回的promise实例对象的then方法添加之后的异步操作,通过executor中的业务逻辑,如果是resolve会进入成功回调,reject会进入失败回调;</p><div class="highlight"><pre><code class="language-js"><span></span><span class="kd">var</span> <span class="nx">promise</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolve</span><span class="p">,</span> <span class="nx">reject</span><span class="p">)</span> <span class="p">{</span>    <span class="c1">//业务逻辑</span>    <span class="nx">resolve</span><span class="p">(</span><span class="s2">"success"</span><span class="p">);</span><span class="p">});</span><span class="nx">promise</span><span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">result</span><span class="p">);</span>    <span class="k">return</span> <span class="nx">result</span><span class="p">;</span><span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>   <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"resolve"</span><span class="p">);</span><span class="p">});</span></code></pre></div><p>初始化promise对象之后,resolve或reject操作,then接口中的函数会接收到结果,then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为Resolved时调用,第二个回调函数是Promise对象的状态变为Reject时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。</p><br><p>当异步操作失败之后,会进入失败回调:</p><div class="highlight"><pre><code class="language-js"><span></span><span class="k">new</span> <span class="nb">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolve</span><span class="p">,</span> <span class="nx">reject</span><span class="p">)</span> <span class="p">{</span>    <span class="nx">reject</span><span class="p">(</span><span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">"ddd"</span><span class="p">));</span><span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span> <span class="p">{</span>    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span><span class="c1">//不会被调用</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span><span class="p">});</span><span class="kd">var</span> <span class="nx">promise</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolve</span><span class="p">,</span> <span class="nx">reject</span><span class="p">)</span> <span class="p">{</span>   <span class="c1">//异步操作业务逻辑</span>   <span class="nx">resolve</span><span class="p">(</span><span class="s2">"result"</span><span class="p">);</span>   <span class="c1">//reject(error);</span><span class="p">});</span><span class="nx">promise</span><span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>  <span class="c1">// success</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>  <span class="c1">// failure</span><span class="p">});</span></code></pre></div>当然也可以不用这方式进入捕捉失败异常,可以使用catch方式,promise.prototype.catch<blockquote><i>添加一个否定(rejection) 回调到当前 promise, 返回一个新的promise。如果这个回调被调用,新 promise 将以它的返回值来resolve,否则如果当前promise 进入fulfilled状态,则以当前promise的肯定结果作为新promise的肯定结果.</i></blockquote><div class="highlight"><pre><code class="language-js"><span></span><span class="kd">var</span> <span class="nx">p1</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolve</span><span class="p">,</span> <span class="nx">reject</span><span class="p">)</span> <span class="p">{</span>  <span class="nx">resolve</span><span class="p">(</span><span class="s1">'Success'</span><span class="p">);</span><span class="p">});</span><span class="nx">p1</span><span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">value</span><span class="p">);</span> <span class="c1">// "成功!"</span>  <span class="k">throw</span> <span class="s1">'oh, no!'</span><span class="p">;</span><span class="p">}).</span><span class="k">catch</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">e</span><span class="p">);</span> <span class="c1">// "oh, no!"</span><span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'after a catch the chain is restored'</span><span class="p">);</span><span class="p">},</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Not fired due to the catch'</span><span class="p">);</span><span class="p">});</span></code></pre></div><p>另外我们应该要知道,then参数可以是一个或者两个可执行函数,可执行函数都或不接受参数;当没有resolve() 而是reject(),或者说状态不是fulfilled而是rejected,这个时候如果其后的then方法只有一个可执行函数作为参数,是无法捕捉错误或异常的,解决方式有两种,其一是明确写好两个可执行函数作为参数;</p><div class="highlight"><pre><code class="language-text"><span></span>new Promise(function(resolve, reject) {    reject(new Error("ddd"));}).then(function(v) {    console.log(v)//不会被调用}, function(e) {    console.log(e)});</code></pre></div><p>其二,如果只想有一个参数,那就使用promise的catch方法进行捕获;</p><div class="highlight"><pre><code class="language-js"><span></span><span class="kd">var</span> <span class="nx">promise</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolve</span><span class="p">,</span> <span class="nx">reject</span><span class="p">)</span> <span class="p">{</span><span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">"ddd"</span><span class="p">);});</span><span class="nx">promise</span><span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>    <span class="c1">//操作</span><span class="p">}).</span><span class="k">catch</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span><span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nx">error</span><span class="p">);});</span></code></pre></div><noscript><img data-rawwidth="560" data-rawheight="161" src="https://pic2.zhimg.com/v2-a2eee63f44cc72310a60b6dc95b3e1b1_b.png" class="origin_image zh-lightbox-thumb" width="560" data-original="https://pic2.zhimg.com/v2-a2eee63f44cc72310a60b6dc95b3e1b1_r.png"></noscript><span><div data-reactroot="" class="VagueImage origin_image zh-lightbox-thumb" data-src="https://pic2.zhimg.com/v2-a2eee63f44cc72310a60b6dc95b3e1b1_b.png" style="width: 560px; height: 161px;"></div></span><p><b>Promise属性:</b>Promise.prototype</p><noscript><img data-rawwidth="788" data-rawheight="317" src="https://pic2.zhimg.com/v2-5b8053cf1029144d8422180186578755_b.png" class="origin_image zh-lightbox-thumb" width="788" data-original="https://pic2.zhimg.com/v2-5b8053cf1029144d8422180186578755_r.png"></noscript><span><div data-reactroot="" class="VagueImage origin_image zh-lightbox-thumb" data-src="https://pic2.zhimg.com/v2-5b8053cf1029144d8422180186578755_b.png" style="width: 660px; height: 265.508px;"></div></span><br><p><noscript><img data-rawwidth="499" data-rawheight="209" src="https://pic2.zhimg.com/v2-bf59f05c222ad1f57b7f04404041038d_b.png" class="origin_image zh-lightbox-thumb" width="499" data-original="https://pic2.zhimg.com/v2-bf59f05c222ad1f57b7f04404041038d_r.png"></noscript><span><div data-reactroot="" class="VagueImage origin_image zh-lightbox-thumb" data-src="https://pic2.zhimg.com/v2-bf59f05c222ad1f57b7f04404041038d_b.png" style="width: 499px; height: 209px;"></div></span><b>Promise方法:</b></p><p>1)<a href="http://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve" class=" wrap external" target="_blank" rel="nofollow noreferrer">Promise.resolve<i class="icon-external"></i></a></p><blockquote><strong>Promise.resolve(value)</strong>方法返回一个以给定值解析后的Promise对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);否则以该值为成功状态返回promise对象。</blockquote><p>2)<a href="http://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject" class=" wrap external" target="_blank" rel="nofollow noreferrer">Promise.reject<i class="icon-external"></i></a></p><blockquote><strong>Promise.reject(reason)</strong>方法返回一个用reason拒绝的Promise。</blockquote><p>3)<a href="http://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/all" class=" wrap external" target="_blank" rel="nofollow noreferrer">Promise.all<i class="icon-external"></i></a><a href="Promise.all" data-editable="true" data-title="zhihu.com 的页面"></a></p><blockquote><strong>Promise.all(iterable)</strong> 方法指当所有在可迭代参数中的 promises 已完成,或者第一个传递的 promise(指 reject)失败时,返回 promise。</blockquote><p>4)<a href="http://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/race" class=" wrap external" target="_blank" rel="nofollow noreferrer">Promise.race<i class="icon-external"></i></a></p><blockquote><strong>Promise.race(iterable) </strong>方法返回一个 promise,在可迭代的 resolves 或 rejects 中 promises 有一个完成或失败,将显示其值或原因。</blockquote>本文所有demo都不是很接近真实场景,可以参考一下阮一峰的Promise的文章<a href="http://link.zhihu.com/?target=http%3A//es6.ruanyifeng.com/%23docs/promise" class=" external" target="_blank" rel="nofollow noreferrer"><span class="invisible">http://</span><span class="visible">es6.ruanyifeng.com/#</span><span class="invisible">docs/promise</span><span class="ellipsis"></span><i class="icon-external"></i></a><br><p><b>参考文献:</b></p><a href="http://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise" class=" wrap external" target="_blank" rel="nofollow noreferrer">MDN Promise<i class="icon-external"></i></a></div><div class="Tipjar"><div class="Tipjar-tagLine"><!-- react-text: 30 -->「<!-- /react-text --><!-- react-text: 31 -->真诚赞赏,手留余香<!-- /react-text --><!-- react-text: 32 -->」<!-- /react-text --></div><button class="Button Button Tipjar-button" type="button">赞赏</button><div class="Tipjar-stateDescription">还没有人赞赏,快来当第一个赞赏的人吧!</div><!-- react-empty: 35 --><!-- react-empty: 36 --></div><div class="PostIndex-footer"><div class="PostIndex-topics TopicItem-wrapper"><span class="TopicItem u-ellipsis PostIndex-topicItem"><!-- react-text: 40 -->ECMAScript 6<!-- /react-text --></span><span class="TopicItem u-ellipsis PostIndex-topicItem"><!-- react-text: 42 -->JavaScript<!-- /react-text --></span><span class="TopicItem u-ellipsis PostIndex-topicItem"><!-- react-text: 44 -->Promise<!-- /react-text --></span></div><div class="PostIndex-reviewers"></div><div class="PostIndex-vote"><button class="Button PostIndex-voteButton Button--green" aria-label="赞" type="button"><i class="icon icon-ic_column_like"></i><!-- react-text: 49 -->14<!-- /react-text --></button><div class="PostIndex-voters"><div class="HoverTitle HoverTitle--slim" data-hover-title="李笑天"><a href="https://www.zhihu.com/people/li-xiao-tian-15-59" class="PostIndex-voter" target="_blank"><img class="Avatar Avatar--is" alt="李笑天" src="https://pic4.zhimg.com/0cb4ddf63_is.jpg" srcset="https://pic4.zhimg.com/0cb4ddf63_im.jpg 2x"></a></div><div class="HoverTitle HoverTitle--slim" data-hover-title="王华涛"><a href="https://www.zhihu.com/people/yuzhonglele" class="PostIndex-voter" target="_blank"><img class="Avatar Avatar--is" alt="王华涛" src="https://pic1.zhimg.com/6865497c4_is.jpg" srcset="https://pic1.zhimg.com/6865497c4_im.jpg 2x"></a></div><div class="HoverTitle HoverTitle--slim" data-hover-title="潜水的渔民丶"><a href="https://www.zhihu.com/people/qian-shui-de-yu-min-zhu" class="PostIndex-voter" target="_blank"><img class="Avatar Avatar--is" alt="潜水的渔民丶" src="https://pic3.zhimg.com/v2-3741b659fbda592601be40329955c11e_is.jpg" srcset="https://pic3.zhimg.com/v2-3741b659fbda592601be40329955c11e_im.jpg 2x"></a></div><div class="HoverTitle HoverTitle--slim" data-hover-title="XivLaw"><a href="https://www.zhihu.com/people/XivLaw" class="PostIndex-voter" target="_blank"><img class="Avatar Avatar--is" alt="XivLaw" src="https://pic4.zhimg.com/88858c64b0d3b9de803eb65d4701ae23_is.jpg" srcset="https://pic4.zhimg.com/88858c64b0d3b9de803eb65d4701ae23_im.jpg 2x"></a></div><div class="HoverTitle HoverTitle--slim" data-hover-title="大卫"><a href="https://www.zhihu.com/people/da-wei-82-95-74" class="PostIndex-voter" target="_blank"><img class="Avatar Avatar--is" alt="大卫" src="https://pic3.zhimg.com/03b42d62450ffcb05428b958512bea22_is.jpg" srcset="https://pic3.zhimg.com/03b42d62450ffcb05428b958512bea22_im.jpg 2x"></a></div><a href="/p/26767436/voters" target="_blank" title="查看全部" class="PostIndex-allVoters"><i class="icon-ic_like_more"></i></a></div></div><div class="PostIndex-control"><div class="Fav"><button class="Button Button Button--plain FavButton" type="button"><i class="icon icon-ic_collect"></i><!-- react-text: 72 -->收藏<!-- /react-text --></button><!-- react-empty: 73 --></div><div class="PostShare"><div class="Menu"><button class="Button Button Button--plain MenuButton MenuButton-listen-hover Button Button--plain" type="button"><i class="icon icon-ic_column_share"></i><!-- react-text: 78 -->分享<!-- /react-text --></button><div class="Menu-dropdown"></div></div></div><div class="Report"><button class="Button Button Button--plain ReportButton" type="button"><i class="icon icon-ic_column_report"></i><!-- react-text: 83 -->举报<!-- /react-text --></button><!-- react-empty: 84 --></div></div></div><div class="Contributes PostIndex-contributes av-card"><div class="BlockTitle av-marginLeft av-borderColor"><span class="BlockTitle-title">文章被以下专栏收录</span><span class="BlockTitle-line"></span></div><ul class="Contributes-list"><li class="Contributes-listItem av-borderColor av-marginLeft" style="opacity: 1; max-height: 300px;"><div class="ContributesItem av-paddingRight"><a href="https://zhuanlan.zhihu.com/dreawer" class="ContributesItem-avatar"><img class="Avatar" src="https://pic1.zhimg.com/v2-5afe4c560e57a9aefff0261d2e8cd460_m.jpg" srcset="https://pic1.zhimg.com/v2-5afe4c560e57a9aefff0261d2e8cd460_xl.jpg 2x"></a><div class="ContributesItem-info"><div class="ContributesItem-nameLine"><a href="https://zhuanlan.zhihu.com/dreawer" class="ContributesItem-name">极乐科技</a></div><p class="ContributesItem-intro u-ellipsis">高效的中文IT技术平台</p></div><a href="https://zhuanlan.zhihu.com/dreawer" class="ContributesItem-entrance">进入专栏</a></div></li></ul></div><div class="PostComment"><div class="BlockTitle av-marginLeft av-borderColor PostComment-blockTitle"><span class="BlockTitle-title"><!-- react-text: 89 -->4 条评论<!-- /react-text --></span><span class="BlockTitle-line"></span></div><div class="CommentEditor PostComment-mainEditor"><div class="CommentEditor-input"><div class="Input-wrapper Input-wrapper--spread Input-wrapper--large Input-wrapper--noPadding"><div class="Input Editable"><div class="Dropzone RichText" style="min-height: 38px;"><div class="DraftEditor-root"><div class="public-DraftEditorPlaceholder-root"><div class="public-DraftEditorPlaceholder-inner" id="placeholder-4t4t4">写下你的评论</div></div><div class="DraftEditor-editorContainer"><div aria-describedby="placeholder-4t4t4" class="public-DraftEditor-content" contenteditable="true" role="textbox" spellcheck="true" tabindex="0" style="outline: none; white-space: pre-wrap; word-wrap: break-word;"><div data-contents="true"><div class="Editable-unstyled" data-block="true" data-editor="4t4t4" data-offset-key="an0j5-0-0"><div data-offset-key="an0j5-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="an0j5-0-0"><br data-text="true"></span></div></div></div></div></div></div></div><input type="file" multiple="" accept="image/jpg,image/jpeg,image/png,image/gif" style="display: none;"><!-- react-empty: 332 --><!-- react-empty: 333 --><!-- react-empty: 334 --></div></div><div class="CommentEditor-actions"><button class="Button Button--plain" type="button">取消</button><button class="Button Button--blue" disabled="" type="button">评论</button></div></div></div><div class="PostCommentList"><div class="CommentItem"><a class="UserAvatar CommentItem-author" href="https://www.zhihu.com/people/mrcodehang" target="_blank"><img class="Avatar Avatar--xs" alt="mrcode" src="https://pic4.zhimg.com/v2-e5c79b1c51ea4f769b6fd2e41a5b03c7_xs.jpg" srcset="https://pic4.zhimg.com/v2-e5c79b1c51ea4f769b6fd2e41a5b03c7_l.jpg 2x"></a><div class="CommentItem-headWrapper"><div class="CommentItem-head"><span class="CommentItem-context"><a href="https://www.zhihu.com/people/mrcodehang" class="" target="_blank">mrcode</a></span></div></div><div class="CommentItem-content"><p>晨总好~</p></div><div class="CommentItem-foot"><span class="CommentItem-like CommentItem-like--empty" title="0 人觉得这个很赞"><!-- react-text: 229 -->0<!-- /react-text --><!-- react-text: 230 --> 赞<!-- /react-text --></span><div class="HoverTitle CommentItem-createdTime" data-hover-title="2017 年 5月 9 日星期二下午 3 点 45 分"><time datetime="Tue May 09 2017 15:45:27 GMT+0800 (中国标准时间)">18 小时前</time></div><button class="Button CommentItem-action CommentItem-actionLike Button--plain" type="button"><i class="icon icon-ic_comment_like"></i><!-- react-text: 235 -->赞<!-- /react-text --></button><div class="Report CommentItem-action CommentItem-actionReport"><button class="Button Button Button--plain ReportButton" type="button"><i class="icon icon-ic_column_report"></i><!-- react-text: 239 -->举报<!-- /react-text --></button><!-- react-empty: 240 --></div></div><!-- react-empty: 241 --></div><div class="CommentItem"><a class="UserAvatar CommentItem-author" href="https://www.zhihu.com/people/xiao-chao" target="_blank"><img class="Avatar Avatar--xs" alt="蔡超" src="https://pic2.zhimg.com/6bdf239d1_xs.jpg" srcset="https://pic2.zhimg.com/6bdf239d1_l.jpg 2x"></a><div class="CommentItem-headWrapper"><div class="CommentItem-head"><span class="CommentItem-context"><a href="https://www.zhihu.com/people/xiao-chao" class="" target="_blank">蔡超</a></span></div></div><div class="CommentItem-content"><p>刚开始一个笔误 renturn 应为 return</p></div><div class="CommentItem-foot"><span class="CommentItem-like CommentItem-like--empty" title="0 人觉得这个很赞"><!-- react-text: 252 -->0<!-- /react-text --><!-- react-text: 253 --> 赞<!-- /react-text --></span><div class="HoverTitle CommentItem-createdTime" data-hover-title="2017 年 5月 9 日星期二下午 4 点 38 分"><time datetime="Tue May 09 2017 16:38:27 GMT+0800 (中国标准时间)">18 小时前</time></div><button class="Button CommentItem-action CommentItem-actionLike Button--plain" type="button"><i class="icon icon-ic_comment_like"></i><!-- react-text: 258 -->赞<!-- /react-text --></button><div class="Report CommentItem-action CommentItem-actionReport"><button class="Button Button Button--plain ReportButton" type="button"><i class="icon icon-ic_column_report"></i><!-- react-text: 262 -->举报<!-- /react-text --></button><!-- react-empty: 263 --></div></div><!-- react-empty: 264 --></div><div class="CommentItem"><a class="UserAvatar CommentItem-author" href="https://www.zhihu.com/people/li-cheng-28-62" target="_blank"><img class="Avatar Avatar--xs" alt="Leecen" src="https://pic3.zhimg.com/v2-43592cfe5a17d4dbc8303a8fe146c5e2_xs.jpg" srcset="https://pic3.zhimg.com/v2-43592cfe5a17d4dbc8303a8fe146c5e2_l.jpg 2x"></a><div class="CommentItem-headWrapper"><button class="Button CommentItem-conversationButton Button--plain" type="button"><i class="icon icon-ic_conversations"></i><!-- react-text: 271 --> 查看对话<!-- /react-text --></button><div class="CommentItem-head CommentItem-head--rightPad"><span class="CommentItem-context"><a href="https://www.zhihu.com/people/li-cheng-28-62" class="" target="_blank">Leecen</a><span class="CommentItem-authorTitle">(作者)</span><span class="CommentItem-replyTo"><span class="CommentItem-replySplit">回复</span><a href="https://www.zhihu.com/people/xiao-chao" class="" target="_blank">蔡超</a></span></span></div></div><div class="CommentItem-content">谢谢 已经更正</div><div class="CommentItem-foot"><span class="CommentItem-like CommentItem-like--empty" title="0 人觉得这个很赞"><!-- react-text: 282 -->0<!-- /react-text --><!-- react-text: 283 --> 赞<!-- /react-text --></span><div class="HoverTitle CommentItem-createdTime" data-hover-title="2017 年 5月 9 日星期二晚上 7 点 00 分"><time datetime="Tue May 09 2017 19:00:39 GMT+0800 (中国标准时间)">15 小时前</time></div><button class="Button CommentItem-action CommentItem-actionLike Button--plain" type="button"><i class="icon icon-ic_comment_like"></i><!-- react-text: 288 -->赞<!-- /react-text --></button><div class="Report CommentItem-action CommentItem-actionReport"><button class="Button Button Button--plain ReportButton" type="button"><i class="icon icon-ic_column_report"></i><!-- react-text: 292 -->举报<!-- /react-text --></button><!-- react-empty: 293 --></div></div><!-- react-empty: 294 --></div><div class="CommentItem"><a class="UserAvatar CommentItem-author" href="https://www.zhihu.com/people/bookone" target="_blank"><img class="Avatar Avatar--xs" alt="BOOKONE" src="https://pic1.zhimg.com/da8e974dc_xs.jpg" srcset="https://pic1.zhimg.com/da8e974dc_l.jpg 2x"></a><div class="CommentItem-headWrapper"><div class="CommentItem-head"><span class="CommentItem-context"><a href="https://www.zhihu.com/people/bookone" class="" target="_blank">BOOKONE</a></span></div></div><div class="CommentItem-content"><p>Promise.all那个呢?</p></div><div class="CommentItem-foot"><span class="CommentItem-like CommentItem-like--empty" title="0 人觉得这个很赞"><!-- react-text: 305 -->0<!-- /react-text --><!-- react-text: 306 --> 赞<!-- /react-text --></span><div class="HoverTitle CommentItem-createdTime" data-hover-title="2017 年 5月 9 日星期二晚上 10 点 16 分"><time datetime="Tue May 09 2017 22:16:24 GMT+0800 (中国标准时间)">12 小时前</time></div><button class="Button CommentItem-action CommentItem-actionLike Button--plain" type="button"><i class="icon icon-ic_comment_like"></i><!-- react-text: 311 -->赞<!-- /react-text --></button><div class="Report CommentItem-action CommentItem-actionReport"><button class="Button Button Button--plain ReportButton" type="button"><i class="icon icon-ic_column_report"></i><!-- react-text: 315 -->举报<!-- /react-text --></button><!-- react-empty: 316 --></div></div><!-- react-empty: 317 --></div></div><!-- react-empty: 98 --></div><div class="PostIndex-recommendZone av-card"><div class="BlockTitle av-marginLeft av-borderColor"><span class="BlockTitle-title">推荐阅读</span><span class="BlockTitle-line"></span></div><ul class="PostIndex-recommends"><li class="PostIndex-recommendItem av-marginLeft av-borderColor"><div class="PostListItem PostListItem--narrow PostListItem--recommended av-paddingRight"><a href="/p/26461788" class="PostListItem-titleImageWrapper"><img src="https://pic3.zhimg.com/v2-c1ef8d166dc6f8d989ca3a776e2e3316_b.jpg" class="PostListItem-titleImage" alt="题图"></a><div class="PostListItem-info"><a href="/p/26461788"><span class="PostListItem-title">柿子要拣软的捏——麻省警察如何给超速车辆开罚单</span><p class="PostListItem-summary"><!-- react-text: 131 -->如果警察都大公无私,车辆会不会领罚单应该只取决于超速与否,但事实没这么简单。罚单是当地…<!-- /react-text --><span class="PostListItem-readall"><!-- react-text: 133 -->查看全文<!-- /react-text --><i class="icon icon-ic_unfold"></i></span></p></a><div class="PostListItem-footer"><span><a class="PostListItem-name" href="https://www.zhihu.com/people/econhistorylover" target="_blank">Manolo</a><span class="Bull"></span><div class="HoverTitle PostListItem-date" data-hover-title="2017 年 4月 19 日星期三晚上 8 点 46 分"><time datetime="2017-04-19T20:46:56+08:00">21 天前</time></div><span class="PostListItem-recommend"><span class="Bull"></span><span>编辑精选</span></span><span class="PostListItem-source"><span class="Bull"></span><span class="PostListItem-sourcePrefix">发表于 </span><a href="/econzy" title="辍耕录">辍耕录</a></span></span></div></div></div></li><li class="PostIndex-recommendItem av-marginLeft av-borderColor"><div class="PostListItem PostListItem--narrow PostListItem--recommended av-paddingRight"><a href="/p/26574418" class="PostListItem-titleImageWrapper"><img src="https://pic2.zhimg.com/v2-cd166870a494e568fe9fdaf89272dec9_b.jpg" class="PostListItem-titleImage" alt="题图"></a><div class="PostListItem-info"><a href="/p/26574418"><span class="PostListItem-title">我们大脑的“缓存”有多大?</span><p class="PostListItem-summary"><!-- react-text: 156 -->文 / @东华君 前言:本文首发于4月26日版的公众号“知识分子”,转载请联系: copyright@zhis…<!-- /react-text --><span class="PostListItem-readall"><!-- react-text: 158 -->查看全文<!-- /react-text --><i class="icon icon-ic_unfold"></i></span></p></a><div class="PostListItem-footer"><span><a class="PostListItem-name" href="https://www.zhihu.com/people/tang.hua" target="_blank">东华君</a><span class="Bull"></span><div class="HoverTitle PostListItem-date" data-hover-title="2017 年 4月 26 日星期三上午 9 点 19 分"><time datetime="2017-04-26T09:19:29+08:00">14 天前</time></div><span class="PostListItem-recommend"><span class="Bull"></span><span>编辑精选</span></span><span class="PostListItem-source"><span class="Bull"></span><span class="PostListItem-sourcePrefix">发表于 </span><a href="/ibrain" title="行为与认知神经科学">行为与认知神经科学</a></span></span></div></div></div></li><li class="PostIndex-recommendItem av-marginLeft av-borderColor"><div class="PostListItem PostListItem--narrow PostListItem--recommended av-paddingRight"><a href="/p/26280926" class="PostListItem-titleImageWrapper"><img src="https://pic1.zhimg.com/v2-163b8b57880e68cf250c59c3c6ca16fc_b.jpg" class="PostListItem-titleImage" alt="题图"></a><div class="PostListItem-info"><a href="/p/26280926"><span class="PostListItem-title">用贝叶斯思想,来谈谈为什么赵处长演的这么像,检察机关还是揪着他不放。</span><p class="PostListItem-summary"><!-- react-text: 181 -->提到贝叶斯推断,就不得不提Bayesian Methods for Hackers 这本书,简单易懂,印刷精美。犹…<!-- /react-text --><span class="PostListItem-readall"><!-- react-text: 183 -->查看全文<!-- /react-text --><i class="icon icon-ic_unfold"></i></span></p></a><div class="PostListItem-footer"><span><a class="PostListItem-name" href="https://www.zhihu.com/people/hu-bo-qiang-doc" target="_blank">胡博强.doc</a><span class="Bull"></span><div class="HoverTitle PostListItem-date" data-hover-title="2017 年 4月 10 日星期一晚上 7 点 35 分"><time datetime="2017-04-10T19:35:16+08:00">1 个月前</time></div><span class="PostListItem-recommend"><span class="Bull"></span><span>编辑精选</span></span><span class="PostListItem-source"><span class="Bull"></span><span class="PostListItem-sourcePrefix">发表于 </span><a href="/c_81843036" title="集智">集智</a></span></span></div></div></div></li><li class="PostIndex-recommendItem av-marginLeft av-borderColor"><div class="PostListItem PostListItem--narrow PostListItem--recommended av-paddingRight"><a href="/p/26429185" class="PostListItem-titleImageWrapper"><img src="https://pic2.zhimg.com/v2-350407abb8f90a0c02067c0467a1f1bd_b.jpg" class="PostListItem-titleImage" alt="题图"></a><div class="PostListItem-info"><a href="/p/26429185"><span class="PostListItem-title">“只有20%的来访者准备好了改变” | 来访者行为改变的5个阶段</span><p class="PostListItem-summary"><!-- react-text: 206 -->在面对来访者之前,咨询师需要经过系统的培训、实习和个人体验。同样的,在对情绪和行为问题…<!-- /react-text --><span class="PostListItem-readall"><!-- react-text: 208 -->查看全文<!-- /react-text --><i class="icon icon-ic_unfold"></i></span></p></a><div class="PostListItem-footer"><span><a class="PostListItem-name" href="https://www.zhihu.com/org/jian-dan-xin-li-uni" target="_blank">简单心理Uni</a><span class="Bull"></span><div class="HoverTitle PostListItem-date" data-hover-title="2017 年 4月 27 日星期四晚上 7 点 34 分"><time datetime="2017-04-27T19:34:22+08:00">13 天前</time></div><span class="PostListItem-recommend"><span class="Bull"></span><span>编辑精选</span></span></span></div></div></div></li></ul></div></div></div>

0 0
原创粉丝点击