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]}

 

posted @ 2022-09-07 11:08  佐佐佑佑  阅读(106)  评论(0编辑  收藏  举报