最近在学习nodeJs,看了慕课网Scott老师讲的nodeJs课程,发现老师讲的不错,清晰易懂,讲到Promise时,他用了bluebird库,但是我发现ES6的新特性里的Promise也可以,不需要引入也能用,这种控制回调函数的方法是真的救星,在jQuery中有一个$.deffered对象,说实话比较难理解,Promise的出现解救了一批前端工作者。
Promise是干嘛的
Promise是一个对象,可以从它那里获取异步操作的消息。使用了 Promise 对象之后可以用一种链式调用的方式来组织代码,让代码更加直观。
Promise三种状态
Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已失败)。只有异步操作的结果才可以改变这个状态,一旦状态改变就不会再变。
resolve 和 reject
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。
resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
then && catch
then方法可以接收俩参数,分别表示resolve和reject函数返回后的回调函数。
下面是个简单的例子。
1 | function promiseTest(tag) { |
catch方法用于指定发生错误时的回调函数。
1 | function promiseTest(tag) { |
Promise.all() && Promise.race()
Promise.all()接收一个数组参数,数组中的对象都是Promise对象,作用是将数组中的所有Promise走完后,返回一个数组结果。
下面是一个小例子。
1 | function promiseTest(tag) { |
Promise.race()接收一个数组参数,数组中的对象都是Promise对象,作用是当数组中有一个实例率先改变状态,就返回结果。
1 | function promiseTest(tag) { |