由于es6没有提供判断一个值是否为promise, 但是工作中又需要对判断一个值是否是promise,从而进行不同的处理
判断一个值是否为promise,需要满足一下三个条件
- promise 取反取反,保证值存在,过滤null, undefined, ‘’, false, 0 等
- typeof promise 必须为对象或者函数,由于第一个条件过滤null 这种特殊情况
- 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
```typescript
function isPromise<T, S>(promise: PromiseLike<T> | S) :promise is PromiseLike<T> {
return !!promise
&& (typeof promise === 'object' || typeof promise === 'function')
&& (typeof promise.then === 'function')
}