ES6规定,Promise对象是一个构造函数,用来生成Promise实例。
Promise接受一个函数作为参数,可接受两个参数resolve ,reject(这两个是JS引擎自带的)。例如:
var promise实例 = new Promise((resolve,reject) => {
resolve('这是返回的结果')
})
promise实例.then((val) => {
console.log(val) // 这是返回结果
})
resolve 函数的作用是 把promise 的状态由 “未完成” 改为“成功”,并将异步操作执行的结果,作为参数传递出去。
reject 函数的作用是把 promise的状态 由未完成“”改为 “失败”,并将异步操作失败的错误信息,作为参数传递出去。
promise实例生成后 ,可以使用then()方法,then() 接受两个回调函数作为参数,第一个回调函数,可以接受Promise对象resolve传出 来的值,作为参数,第二个回调函数 (非必选)接受 Promise对象reject传出的值,作为参数。例如:
promis.all()方法:
接受一个数组参数,但是每个参数必须是个Promise实例
只有四个请求都成功执行完毕或者有一个reject 失败,才会走all()后面的回调函数。
如果all()参数的两个Promise对象 有一个reject ,并且有catch方法,则会走参数定义的catch方法,如果没有才走all()的catch()方法。
Promise.race()方法
race()必须接收一个数组参数,记得用[ ],不然会报错。
race()是只要参数(P1 P2)的promise 对象有结果了,都会把值传给P 的回调函数。
Promise.resolve() 和 Promise.reject()方法
这两种 的参数首先不同:
resolve 有四种参数:
1. promise实例 会原封 不动的返回实例。
2.参数是个具有then()方法的对象,会把对象变为Promise对象,再立即执行他的then()方法
3. 参数没有then()或者参数不是对象,比如是字符串。由于没有then()不是异步的,所以当Promise.resolve()会立即返回一个状态为resolve的实例,所以回调函数会立即执行,并且把值传给回调函数。
4.没有参数。就是为了得到一个promise对象。const p = Promise.resolve();
reject()的参数没这么多情况。传入的是什么,传给回调函数的就是什么,
并且用catch捕获。