node.js之Promise
在node.js中,回调函数的多重嵌套可能会导致代码难以维护。因此,我们借助Promise来封装异步函数,使用统一的链式API来避免函数不断的嵌套匿名函数,脱离这多重回调的麻烦,使代码可读性更强。
简单来说,Promise就是把函数的嵌套改成了并列,使其代码更友好。
Promise对象一般有三种状态:Pending(未完成),Fulfilled(操作成功),Rejected(操作失败)
说说他的一些常用方法:
①then()方法:
then(onFulfilled,onRejected)方法接收两个参数,一般是两个函数,这两个函数是异步执行的,第一个参数用来处理操作成功后的结果,第二个参数用来处理操作失败后的原因。then()方法返回值是一个Promise对象,这一特点使得我们可以通过链式调用then()来达到控制流程的效果。关于then()方法函数的一些细节:
onFullfilled或onRejected函数的返回值如果不是Promise对象,则该值将作为下一个then方法中onFulfilled方法的第一个参数;如果是,则then()方法的返回值为该Promise对象
onFullfilled或onRejected函数若有异常抛出,则该then()方法返回的Promise对象的状态变为Rejected,如果Promise对象调用该then()对象,则该error对象会作为onRejected函数的第一个参数
如果Promise对象的状态变为fulfilled并且then()方法中没有提供onFulfilled函数,则then()方法返回的Promise对象状态仍为fulfilled且成功的结果为上一个Promise的结果。
基本思想
-
异步任务返回一个Promise对象,它有三种状态
-
pending(未完成)
-
resolved,fulfilled(已完成)
-
rejected(失败)
-
-
它有两种变化途径
-
pending --> resolved/fulfilled
-
pending --> rejected
-
-
它有两种结果
-
异步操作成功,返回一个值,状态变为resolved
-
异步操作失败,抛出一个错误,状态变为rejected
-
Promise使用.then()方法添加回调函数,then接收两个回调函数,第一个为成功时的回调函数,另一个为失败时的回调函数.主要为状态改变时调用相对的回调函数.
而且then可以链式调用.