promise用了挺长时间, 感觉这玩意都能算是个常用设计模式了
不过还是有些地方比较迷糊, 打算自己从头实现一个 梳理一下
promise异常处理
使用时候最晕的就是异常处理的流程, 转载一个:
catch是then(undefined, func)的语法糖,
对于 then(func1, func2) 来说,必会调用 func1 或 func2 之一,但绝不会两个都调用。
而 then(func1).catch(func2) 这样,如果 func1 返回否定的话 func2 也会被调用,因为他们是链式调用中独立的两个步骤。
例子1
|
|
例子2
|
|
上面的代码就是下面这段的非阻塞异步版:12345678910try { var story = getJSONSync('story.json'); var chapter1 = getJSONSync(story.chapterUrls[0]); addHtmlToPage(chapter1.html);}catch (e) { addTextToPage("Failed to show chapter");}document.querySelector('.spinner').style.display = 'none';
例子3 all的错误处理
|
|
then队列
如果想要实现then队列123fun.then(function(){ return //thenable})
里边要明确的return一个thenable对象:12如果你返回一个值,它就会被传给下一个“then”的回调;而如果你返回一个“类 Promise”的对象,则下一个“then”就会等待这个 Promise 明确结束(成功/失败)才会执行
所以要是忘了return //thenable, 就相当于是返回了一个值(undefined)