如果一个变量是 Object, 有 then 和 catch 方法, 就认为是 Promise

  1. const isPromise = (val) => {
  2. return isObject(val) && isFunction(val.then) && isFunction(val.catch);
  3. };

image.png

  1. function isPromise(obj) {
  2. return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
  3. }

!! 在js 中的作用

一个 “ ! “ 将变量转为一个boolean类型的值,那么两个连续的 “ ! “号叠加就会把变量转为它理应代表的布尔值。

  1. number类型: 不为0 就,!!num 等于true;
  2. string类型: 不为"" (空字符串),!!str 等于true;
  3. !!null 等于false
  4. !!undefined 等于false
  5. !!{} 等于 true //注意:对象就算为空都会被转为true
  6. !!function(){} 等于 true //注意:这样写function 并不会执行function,所以就算function里面写任何东西都会返回true
  7. console.log(!!0); //false
  8. console.log(!!123); //true
  9. console.log(!!"some"); //true
  10. console.log(!!""); //false
  11. console.log(!!undefined) //false
  12. console.log(!!null) //false