1. 程式人生 > 實用技巧 >new Promise 出來的promise例項物件的預設狀態是pendding,不能像then/catch方法一樣返回一個新的promise例項物件!!!

new Promise 出來的promise例項物件的預設狀態是pendding,不能像then/catch方法一樣返回一個新的promise例項物件!!!

then/catch方法可以返回一個新的promise例項物件。then/catch方法指定的回撥函式(執行)return的返回值可以決定這個新的promise例項物件的狀態,這正是實現then方法鏈式呼叫的基礎。

promise例項物件預設狀態是pendding,可以改變自身狀態。但普通的promise例項物件不會返回一個新的promise例項物件,因此在promise例項物件的執行器函式return一個結果是沒有意義的。promise例項物件應該關注的是自身的狀態改變。

  new Promise((resolve, reject) => {
        return Promise.resolve(1) //return一個成功狀態的promise例項物件:promise例項狀態依然是pendding。
      })
      .then(value => {
        console.log('成功', value);
        return 5
      }, reason => {
        console.log('失敗', reason);
      })
      .then(value => {
        console.log('成功hhh', value);
      }, reason => {
        console.log('失敗', reason);
      })

    //無列印 
    //錯誤分析:認為promise例項物件也能返回一個新的promise例項物件,實際上這是then/catch方法的特點,和promise例項物件無關。promise例項物件的關注點應該是自身狀態的改變,利用promise例項物件(執行器函式中)去return一個值去鏈式呼叫是沒有意義的。promise例項物件可以改變自己的狀態並且傳遞狀態值。
    new Promise((resolve, reject) => {
        return 5 //return5
      })
      .then(value => {
        console.log('成功', value);
        return 5
      }, reason => {
        console.log('失敗', reason);
      })
      .then(value => {
        console.log('成功hhh', value);
      }, reason => {
        console.log('失敗', reason);
      })

    //無列印