异步篇:识别Promise (方法之一)

如何确定一个值是不是真正的 Promise,或者这个值的行为是不是很类似 Promise ?Promise 是通过 new Promise(…) 创建,那么是不是可以用 instanceof Promise 来检查?

一. 为什么 instanceof 不足以检查 Promise

原因有许多,总结如下:

  1. Promise 值可能是从其他浏览器窗口接收到的,然而接收到的 Promise 可能和当前窗口的框架不同,因此不能识别 Promise 实例。
  2. 库或者框架可能会实现自己的 Promise ,不是使用 原生 ES6 Promise 实现,所以无法检查。
二. 识别 Promise

识别 Promise,可以按照这个思路来识别:有具有 then(…) 方法的对象和函数。比如识别一只鸭子,它看起来像鸭子,可能还不足以识别出来,但是它的叫声也像鸭子,那大概率错不了。识别 Promise 的例子:

if(p !== null && (typeof p 

你可能感兴趣的:(JavaScript,Promise)