理解promise及适用场景

来源:互联网 发布:国史大纲 版本 知乎 编辑:程序博客网 时间:2024/06/05 16:17

异步的概念:

参考:http://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651222422&idx=1&sn=8c059af21a4cd7c9041ab719459451d5&

mpshare=1&scene=23&srcid=0511fvGzKWdEjPUi9hxyAHIn#rd


http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

promise陷阱:http://www.jianshu.com/p/9e4026614fbe

promise与异步:http://ouvens.github.io/frontend-javascript/2016/03/04/promise-and-asyncjs.html


实现异步的方法

实现异步的方法目前有,自定义嵌套,PromisegeneratorDefferd,还有ES7async(其实是generator的封装),不同场景可以选择不同的方式去实现


promise的定义

先给下Promise学术点的描述:
promise代表一个异步操作的执行返回状态,这个执行返回状态在promise对象创建时未必已知。它允许你为异步操作的成功或失败指定处理方法


promise的用途

Promise可以用来避免异步操作函数里的嵌套回调callback hell)问题,因为解决异步最直接的方法是回调嵌套,将后一个的操作放在前一个操作的异步回调里,但如果操作多了,就会有很多层的嵌套。


promise的知识点

1.Promise实例的then方法作用是为Promise实例添加状态改变时的回调函数。then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数。

2.then方法返回的是一个新的Promise实例,(注意:不是原来那个Promise实例)。因此可以采用链式写法。

3.Promise对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。即错误总会被下一个catch语句捕获。

4.一般,不要在then 方法中定义rejected状态的回调函数(即then的第二个参数),而应总是使用catch方法。因为catch更接近同步写法。

5.catch方法返回的还是一个Promise对象,可接着调用then方法。

6. JavaScript 函数中,只有 return / yield / throw 会中断函数的执行,其他的都无法阻止其运行到结束的,这也是所谓的Run-to-completion 特性。


promise的优点

1. Promise 的一大优点,就是结果不变性,一旦 Promise 的值确定为fulfilled 或者 rejected 后,无论过多久,获取到的 Promise 对象的值都是一样的。

对不变性的理解:

 resolve/reject 不过只是一个回调而已,而所谓的不变性只是说,当遇到第一个 resolve/reject 后,便根据其结果给此 Promise 打上了一个 tag,并且不能更改,而后面的该干啥继续干,不干本 Promise 的事儿了。


使用promise注意事项

1.始终在Promise 构造器中书写逻辑的话,即使出现了意外的输入,也能绝大部分情况下返回一个Rejected  Promise

2. Promise 构造器中,除非你明确知道使用 throw 的正确姿势,否则都请使用 reject

3。能够兼容 Promise  Callback 确实是件很棒的事情,用第三方代码前请尽量理解其原理,短小的话完全可以自己写一个。Promise虽好,可不要乱用哦,实时牢记它会吞没错误的风险。



0 0