promise是异步编程的一种解决方案;
简单的来说,promise 就是一个容器,里面保存着某个未来才会结束的事件的结果。期约是尚不存在结果的一个替身。
promise有两个特点:
1》:promise对象的状态不受外界影响。promise对象代表一个异步操作,有三种状态:pending 待定状态,fulfilled 兑现状态 rejected 拒绝状态,只有异步操作的结果可以决定当前是哪种状态。其他操作都无法改变这个状态。
2》:状态一旦改变,就不能在变了。任何时候都可以得到这个结果,promise的改变只有两种可能,从pending 到 fulfilled 和从 pending 变为 rejected 。只要这两种情况发生,状态就凝固了,不在变了,会一直保持这个结果,这是就称为resolved(已定型)。如果改变发生了,再对promise对象添加回调函数,也会立即得到结果。
有了promise对象,就可以将异步操作以同步操作的流程表达处理,避免层层嵌套的回调函数,
promise有一些缺点,首先,无法取消promise 。一旦新建就会立即执行,无法中途取消。其次,如果不设置回调函数,promise内部会抛出错误,不会反应到外部。再来,当初去pending状态时,无法得知进展到哪一阶段;
基本用法
promise对象是一个构造函数,用来生成Promise实例。
他接受一个函数作为参数,该参数分别为resolve 和 reject ,他们是两个函数,有Javascript引擎提供,不用自己部署
resolve函数的作用是,将promise对象从未完成状态变为成功状态,在异步操作成功时调用,并将异步操作的结果作为参数传递出去。
reject函数的作用是将promise对象的状态从未完成状态变为失败状态。在异步操作失败时调用,并将异步操作报出的结果,作为参数传递出去。
promise实例生成以后 ,可以用then方法 分别指定resolved状态和rejected状态的回调函数
then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。这两个函数都是可选的,不一定要提供。它们都接受Promise对象传出的值作为参数。
下面是一个promise对象的简单例子
上述代码中,timeout 方法返回一个promise实例,表示一段时间以后才会发生结果,过了指定时间,promise实例的状态变为resolved 就会触发then方法绑定的回调函数。
上述代码中 。promise新建后立即执行,所以首先输出promise ,然后then方法指定回调函数,将在当前脚本所有同步执行完成才会执行,所以resolved最后输出。
网友评论