判斷對象是否為Promise對象

方法1 判斷是否有then方法

Promises/A+規(guī)范有一個叫做thenable的概念,基本上是 "一個有then方法的對象"。所以你可以這樣來判斷,但是我們不推薦


function isPromise(obj) {

  return (

    !!obj &&

    (typeof obj === "object" || typeof obj === "function") &&

    typeof obj.then === "function"

  )

}

但是該方法,在以下案例中,也會被識別成了Promise對象,盡管他僅僅是一個普通對象


const obj = {

  then: function () {

    console.log('then')

  }

}

isPromise(obj) // true

方法2 判斷 Promise.resolve(object) == object


function isPromise(object) {

  if (Promise && Promise.resolve) {

    return Promise.resolve(object) == object

  } else {

    throw new Error("Promise not supported in your environment")

  }

}

var p = new Promise(function(resolve,reject){

  resolve()

});

isPromise(p) // true

該方法則可以區(qū)分方法一中的普通帶then方法的對象跟真正的promise對象,使用Promise.resolve處理過的對象,將會變成一個Promise對象。如果他等于之前的對象,則能得出resolve的對象也是Promise對象

方法3 這就是檢查對象的原型的字符串是否為"[object Promise]"


function isPromise(p) {

  return p && Object.prototype.toString.call(p) === "[object Promise]"

}

var pi = 3.14

var name = "黑貓警長"

var numbers = [1, 2, 3]

var p = new Promise(function (resolve, reject) {

  resolve()

})

isPromise(pi) // false

isPromise(name) // false

isPromise(numbers) // false

isPromise(p) // true

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容