由于es6没有提供判断一个值是否为promise, 但是工作中又需要对判断一个值是否是promise,从而进行不同的处理

判断一个值是否为promise,需要满足一下三个条件

  1. promise 取反取反,保证值存在,过滤null, undefined, ‘’, false, 0 等
  2. typeof promise 必须为对象或者函数,由于第一个条件过滤null 这种特殊情况
  3. typeof promise.then 必须也是函数 ```javascript function isPromise(promise) { return !!promise && (typeof promise === ‘object’ || typeof promise === ‘function’) && (typeof promise.then === ‘function’) }

isPromise(Promise.resolve());//=>true isPromise({then:function () {}});//=>true isPromise(null);//=>false isPromise({});//=>false isPromise({then: true})//=>false

  1. ```typescript
  2. function isPromise<T, S>(promise: PromiseLike<T> | S) :promise is PromiseLike<T> {
  3. return !!promise
  4. && (typeof promise === 'object' || typeof promise === 'function')
  5. && (typeof promise.then === 'function')
  6. }