promise对象语法

基本语法:


    const p2 = new Promise(function (resolve, reject) {

    })
    console.log(p2);
    //[[Prototype]]: Promise
    //[[PromiseState]]: "pending"
    //[[PromiseResult]]: undefined

pormise的状态有三种:1.pending等待 2.fulfilled成功 3.rejected失败

当调用resolve函数的时候,状态就会变为fulfilled,会执行then这个方法,并且还会把参数传给res1

当调用reject函数的时候,状态就会变为rejected,会执行catch这个方法,并且还会把参数传给res2

    const p1 = new Promise(function (resolve, reject) {
      // resolve({ name: '小芳' })
      reject([20, 32, 21, 56])
    })
    p1.then(function (res1) {
      console.log('成功', res1)
    }).catch(function (res2) {
      console.log('失败', res2)
    }).finally(function () {
      console.log('默认会执行的函数')
    })
    console.log(p1);

.then里面可以写两个函数,第一个是成功会执行的函数,第二个是失败会执行的函数

  <script>
    const p1 = new Promise(function (resolve, reject) {
      // resolve({ name: '小芳' })
      reject([20, 32, 21, 56])
    })
    p1.then(function (ok) {
      console.log('成功', ok)
    }, function (err) {
      console.log('失败', err)
    })
  </script>

var p1 = new Promise(()=>{});
var p2 = p1.then(function f_ok(){}, function f_err(){}); 
// p2也是一个promise对象。

console.log(p1 === p2); // false

then的返回值p2的状态和值该如何确定呢?

  • 如果p1的状态是pending,则p2的状态也是pending。
  • 如果p1的状态是resolved,then()会去执行f_ok,则p2的状态由f_ok的返回值决定。
    • 如果f_ok返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是f_ok函数的return值。
    • 如果f_ok返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准。
    • 如果f_ok这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且p2的promiseValue就是这个错误对象。
  • 如果p1的状态是rejected,then()会去执行f_err,则p2的状态由f_err的返回值决定。
    • 如果f_err返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是f_err函数的return值。
    • 如果f_err返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准。
    • 如果f_err这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且p2的promiseValue就是这个错误对象。

猜你喜欢

转载自blog.csdn.net/m0_67296095/article/details/124525838
今日推荐