promise
- 回调函数内部的 this 都是指向 window;回调函数定义:当前处理逻辑完成之后,执行封装在callback函数中的后处续理逻辑;
- new Promise() 参数接收一个同步自执行匿名函数,构建实例时,该参数就会自动执行
let promise = new Promise((resolve,reject) => { console.log(1); resolve("returnValue"); // resolve和reject函数传入的实参就当前promise对象的[[PromiseResult]]的值 }); console.log(2); //控制台输出1->2 promise对象: [[PromiseState]]: "pending" // 当前promise的状态,可选值:fulfilled(成功态)、rejected(失败态)、pending(等待,初始值) [[PromiseResult]]: "returnValue" // 当前promise的值 resolve() -> PromiseStatus从pending变为fulfilled;只接受一个参数 reject() -> PromiseStatus从pending变为rejected;只接受一个参数
- then 方法会返回一个新的 promise(testPromise):
let promise = new Promise((resolve, reject) => { resolve(1);}); let newPromise = promise.then(res => { return res*2; // 默认 return undefined; 返回值做为当前then方法返回的promise的[[PromiseResult]]属性的值 }) // newPromise.[[PromiseResult]] = 2
- then 抛错
let promise = new Promise((resolve, reject) => { resolve(1); }); // 如果then方法抛错 let newPromise = promise.then(res => { throw new Error("参数必须是字符串!"); }) newPromise 对象: [[PromiseState]]: "rejected" [[PromiseResult]]: Error: 参数必须是字符串!
如果没有错误捕获,则控制台报错如下:
如果存在错误捕获,则控制台不会报错,输出如下:
newPromise.catch(err => {
console.log(err);
})
- 如果 then 方法的回调函数返回一个普通值(a),则 returnPromise.[[PromiseResult]] = a
- 如果 then 方法的回调函数返回一个promise(b),则 returnPromise= b
let promise = new Promise((resolve, reject) => {resolve(1);}); let newPromise = promise.then(res => { return new Promise((resolve, reject) => { resolve('a'); }); }) newPromise对象如下:[[PromiseState]]: "fulfilled" [[PromiseResult]]: a
- Promise.reject('reject') 返回一个新失败态的 promise:{[[PromiseState]]: "rejected" , [[PromiseResult]]: "reject"} ; 如果 reject() 不接收参数,则返回的 [[PromiseResult]]=undefined
- Promise.all,promises 数组中所有 promise 对象都达到 resolve 状态,才执行 then 回调。
var p1 = Promise.resolve(1); var p2 = Promise.resolve(2); var p3 = Promise.resolve(3); const promise = Promise.all([p1, p2, p3]).then(function(results){ return results; }); console.log(promise); // promise = {[[PromiseState]]: "fulfilled" , [[PromiseResult]]: [1,2,3]}