Promise 命令的案例

function foo(){
    return new Promise((resolve,reject)=>{
        let random = Math.random();  //声明随机数
        if(random>0.5){
            resolve(random);
        } else{
            reject(random);
        }
    });
}

//调用
foo().then((a)=>{
    console.log('success:',a);
}).catch((b)=>{
    console.log('error:',b);
});

上面代码中,函数foo返回一个Promise对象,Promise对象的参数为resolve,reject,箭头函数中声明一个随机数,如果大于0.5,则返回resolve,调用then函数,输出success。



cnost p1 = new Promise(function(resolve,reject){
    setTimeout(()=> reject(new Error('fail')),3000)
})

const p2 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve(p1),1000
    })
})

p2.then(()=>{
    console.log(result);
}).catch(()=>{
    console.log(error);
});

//4s后返回  Error:fail

上面代码中,p1是一个 Promise,3 秒之后变为rejectp2的状态在 1 秒之后改变,resolve方法返回的是p1。由于p2返回的是另一个 Promise,导致p2自己的状态无效了,由p1的状态决定p2的状态。所以,后面的then语句都变成针对后者(p1)。又过了 2 秒,p1变为reject,导致触发catch方法指定的回调函数。



new Promise((resolve,reject)=>{
    resolve(1);
    console.log(2);
}).then((a)=>{
    console.log(a);
});

//2
//1

上面代码中,调用resolvereject并不会终结 Promise 的参数函数的执行。



new Promise((resolve, reject) => {
  return resolve(1);
  // 后面的语句不会执行
  console.log(2);
})

上面代码中,调用resolvereject以后,Promise 的使命就完成了,后继操作应该放到then方法里面,而不应该直接写在resolvereject的后面。

                  ------------------------本文完------------------------

猜你喜欢

转载自blog.csdn.net/qq_42720683/article/details/83027062