promise

  • promise已关闭评论
  • 14 次浏览
  • A+
所属分类:Web前端
摘要

         

  • 回调函数内部的 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: 参数必须是字符串!
如果没有错误捕获,则控制台报错如下:

 promise

如果存在错误捕获,则控制台不会报错,输出如下:
newPromise.catch(err => {     console.log(err); })

 promise

 

  • 如果 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]}