判断对象是否为Promise对象

方法1 判断是否有then方法

Promises/A+规范有一个叫做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

该方法则可以区分方法一中的普通带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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容