promise 从入门到精通1(准备篇)

从这一篇,我将一步步带大家写出一个promise,大家不用着急,我这博客是边写,边做的笔记,所以有可能啰嗦,

也会出现很多错误,不过我们不着急,一点点解决,总会全部搞定的!

在学习promise 之前呢,我希望你有es6基础知识,什么解构语法,let const 都要会用,这起码的吧!

————————————————————————————————————————————————————————

开始,准备

promise 从入门到精通1(准备篇)

在js 中,函数是第一原型

 

const fn = new Fn();  fn 就是实例对象, new 一个,肯定就是实例对象了!

Fn.prototype Fn 就是函数对象了,因为它不是实例对象,就是函数对象,我也成为类对象!

上面稍微理解下就行了,以后还会慢慢看到,

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

 

上面就是同步的回调,它会先遍历完数组,再打印最后一条语句

promise 从入门到精通1(准备篇)

 

好,异步回调:

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

 

看到没, 异步的回调会放到回调队列中,所以执行慢一点,后执行!

——————————————————————————————————————————————

promise 从入门到精通1(准备篇)

一般我们去学js 的时候,会出现报错信息,我们都能很开心的处理好,所以没有注意到底是啥错误类型,上面列表出来了

 

 

 

学过java 都知道类有子类,父类的概念,比如,哺乳动物,有人,牛,马等,算了,我给大家画一个图:

promise 从入门到精通1(准备篇)

人,牛,马都是哺乳动物,所以哺乳动物就是父类, 而人牛马就是哺乳动物的子类

说白了,人牛马是哺乳动物的一种

而我们的错误

 

promise 从入门到精通1(准备篇)

 

23456 类型的错误都是1错误的一种!

——————————————————————————————

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

 

行,错误的知识都在上面了,下面我们就好好体会下错误!

1, 引用变量不存在,我们写写!

promise 从入门到精通1(准备篇)

promise 从入门到精通1(准备篇)

这个和Java空指针差不多,我感觉,就是指针找不到对象!

 1. 错误的类型
        Error: 所有错误的父类型
        ReferenceError: 引用的变量不存在
        TypeError: 数据类型不正确的错误
        RangeError: 数据值不在其所允许的范围内
        SyntaxError: 语法错误
    2. 错误处理
        捕获错误: try ... catch
        抛出错误: throw error
    3. 错误对象
        message属性: 错误相关信息
        stack属性: 函数调用栈记录信息
  */

  // 1. 常见的内置错误
  // 1). ReferenceError: 引用的变量不存在
  // console.log(a) // ReferenceError: a is not defined
  // console.log('-----') // 没有捕获error, 下面的代码不会执行

  // TypeError: 数据类型不正确的错误
  // let b
  // // console.log(b.xxx) // TypeError: Cannot read property 'xxx' of undefined
  // b = {}
  // b.xxx() // TypeError: b.xxx is not a function


  // RangeError: 数据值不在其所允许的范围内
  // function fn() {
  //   fn()
  // }
  // fn() // RangeError: Maximum call stack size exceeded

  // SyntaxError: 语法错误
  // const c = """" // SyntaxError: Unexpected string


  // 2. 错误处理
  // 捕获错误: try ... catch
  // try {
  //   let d
  //   console.log(d.xxx)
  // } catch (error) {
  //   console.log(error.message)
  //   console.log(error.stack)
  // }
  // console.log('出错之后')

  // 抛出错误: throw error
  function something() {
    if (Date.now()%2===1) {
      console.log('当前时间为奇数, 可以执行任务')
    } else { // 如果时间是偶数抛出异常, 由调用来处理
      throw new Error('当前时间为偶数无法执行任务')  
    }
  }

  // 捕获处理异常
  try {
    something()
  } catch (error) {
    alert(error.message)
  }