promise记录一下!
含义
Promise是异步编程的一种解决方案,比传统的解决方案—回调函数和事件—更合理和强大。
所谓promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
从语法上说,Promise是一个对象,从它可以获取异步操作的消息。
Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。
promise对象两个特点:
1.对象的状态不受外界影响。promise对象代表一个异步操作,有三种状态:
pending(进行中),
fuifilled(已成功),
rejected(已失败)。
`只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。`
这也是promise这个名字的由来,它的英语的意思就是‘承诺’,表示其他手段无法改变。
2.一旦状态改变,就不会再变。任何时候都可以得到这个结果。
promise对象的状态改变,只要两种可能:
从pending变为fulfilled,
从pending变成rejected,
`只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为resolved (已定型)。`
如果改变已经发生了,你再对promise对象添加回调函数,也会立即得到这个结果。
这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
有了promise对象,就可以将异步操作`以同步操作的流程`表达出来,避免了层层嵌套的回调函数。
此外,promise对象提供统一的接口,使得控制异步操作更加容易。
promise缺点:
首先,无法取消promise,一旦新建它就会立即执行,无法中途取消。
其次,如果不设置回调函数,promise内部抛出的错误,不会反应到外部。
第三,当处于pending状态时,无法得知目前进展到哪一个阶段了(刚刚开始还是即将完成。)
promise基本用法:
ES6规定,promise对象是一个构造函数,用来生成promise实例。
下面代码创造了一个promise实例。
const promise = new Promise( (resolve,reject) = > {
//...some code
if( /*异步操作成功*/ ){
resolve(value);
}else{
reject(error);
}
})
promise构造函数接受`一个函数`作为参数,该函数的两个参数分别数resolve和reject。
它们是两个函数,由JavaScript引擎提供,不用自己部署。
`resolve函数的作用是,将promise对象的状态从'未完成'变成'成功'(即从pendng变为resolved),`
`在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;`
`reject函数的作用是,将promise对象的状态从'未完成'变成'失败'(即从pending变成rejected),`
`在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。`
`以同步操作的流程`
网友评论