美文网首页
判断对象是否为Promise对象

判断对象是否为Promise对象

作者: 470d98b91bd3 | 来源:发表于2022-10-18 17:59 被阅读0次

    方法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
    
    

    相关文章

      网友评论

          本文标题:判断对象是否为Promise对象

          本文链接:https://www.haomeiwen.com/subject/gykszrtx.html