Promise的理解

47次阅读

共计 2253 个字符,预计需要花费 6 分钟才能阅读完成。

函数对象和实例对象
实例对象:new 函数产生的对象
函数对象:将函数作为对象使用

1.2 二种回调函数
1.2.1 同步回调

 理解:立即执行,完全执行完了才结束,不会放入回调队列中

eg:数组遍历相关的回调函数 // Promise 的 excutor 函数
const arr = [1,3,5]
arr.forEach(item => { // 遍历回调, 同步
console.log(item)
})
console.log(‘forEach() 之后’)

1.2.2 异步回调

 理解:不会立即执行,会放入回调队列中将来执行

Eg:定时器回调 // ajax 回调 / Promise 的成功或失败的回调
setTimeout(() => { // 异步回调函数,会放入队列将来执行
console.log(‘setTimeout()’)
},0)
console.log(‘setTimeout() 之后’)

Error
目标:进一步理解 JS 中的错误(Error)和错误处理

  1. 错误的类型
    Error:所有错误的父类型

//1. 常见的内置错误
1)ReferenceError:引用的变量不存在
console.log(a) // ReferenceError:a is not defined。// 没有捕获 error,下面的代码不会执行
2)TypeError:数据类型不正确的错误
let b
console.log(b.xxx) //TypeError:cannot read property‘xxx’of undefined
b={}
b.xxx() //TypeError:b.xxx is not a function
3)RangeError:数据值不在其所允许的范围内
function fn() {
fn()
}
fn() //RangeError:Maximum call stack size exceeded
4)SyntaxError:语法错误

  1. 错误处理

捕获错误:try…catch
try {
let d
console.log(d.xxx)
} catch (error) {
console.log(error.message)
conaole.log(error.stack)
}
抛出错误:throw error
function something() {
If (Date.now()%2===1) {

console.log(‘当前时间为奇数,可以执行’)

} else {

throw new Error(‘当前时间为偶数,不可执行’)

}
}
// 捕获处理异常
try {
Something()
} catch (error) {
console.log(error.message)
}

  1. 错误对象

message 属性:错误相关信息
stack 属性:函数调用栈记录相关信息

Promise 的理解和使用
2.1 promise 是什么?
1. 抽象表达:
Promise 是 JS 中进行异步编程的新的解决方案(旧的是谁?)

  1. 具体表达:

(1)从语法上说:promise 是一个构造函数
(2)从功能上说:promise 对象用来封装一个异步操作并可以获取其结果

2.1.2 promise 的状态改变

  1. pending 变为 resolved
  2. Pending 变为 rejected

说明:只有 2 种,且一个 promise 对象只能改变一次,无论变成为成功还是失败,都会有一个结果数据,成功的结果数据一般为 value,失败的结果数据一般为 reason

2.1.3 promise 的基本流程

2.1.4 promise 的使用
`//1. 创建一个新的 promise 对象
const p = new Promise((resolve, reject) => {// 执行器函数
// 2. 执行异步操作任务
setTimeout(() => { // 异步回调函数,会放入队列将来执行
const time = Date.now() // 如果当前时间是偶数就代表成功,否则失败
//3.1 如果成功,调用 resolve(value)
If (time%2 == 0) {

resolve(‘成功的数据,time=’, + time)

} else {
// 3.2 如果失败,调用 reject(reason)

reject(‘失败的数据,time=’, + time)

}
},1000)
})
p.then(
Value => {// 接收到成功的 value 数据 onResolved
console.log(‘成功的回调’, value)
},
Reason => {// 接收到失败的 reason 数据 onReject
console.log(‘失败的回调’, reason)
})`

  1. 如何改变 Promise 的状态

(1)resolve(value):如果当前是 pending 就会变为 resolved
(2)reject(reason):如果当前是 pending 就会变为 rejected
(3)抛出异常:如果当前是 pending 就会变为 rejected

  1. 一个 promise 指定多个成功 / 失败回调函数,都会调用吗?

当 promise 改变对应状态时都会调用
`var pp = new Promise((resolve, reject) => {
//resolve(1)//promise 变为 resolved 成功状态
//rejected(2)// promise 变为 rejected 失败状态
//throw new Error(‘出错了’)// promise 变为 rejected 失败状态,reason 为抛出的 error
throw 3 // 抛出异常,promise 变为 rejected 失败状态,reason 为抛出的 3
})
pp.then(
value => {},
reason => {console.log(‘reason’, reason)}
) `

正文完
 0