js

1. 梗概:

1. 抛出/创建Promise以开始异步处理:

通过传递回调函数给Promise构造方法

2. 异步处理Promise对象:

通过await语法糖

child::await

2.1. 通过链式调用then()与cath()与finally()方法:

  1. child::Promise的then方法
  2. Promise中还有一个catch()方法, 向其传入回调函数可以处理失败的Promise, 如果传递链中任意Promise出现错误, 则会冒泡到最后的catch()方法中
  3. Promise中还有一个finally()方法, 想起传入回调函数可以进行首尾工作的执行

2. 创建Promise语法以开始异步处理:

new Promise(function(处理成功时调用的回调函数形参resolve,处理失败时调用的回调函数形参reject){
	//异步处理
	if(处理成功的条件){
		/*调用成功函数*/
		resolve(对应参数)//执行执行了resolve或reject函数,则该Promise状态发生变化
	}
	if(处理产生异常){
		/*调用错误处理函数*/
		reject(对应参数)
	}
})

1. 说明:

  • 需要传入一个回调函数给Promise构造函数, 其中要求这个回调函数有两个函数形参 ^f8c7eb
  • 如果给resolve()传递一个Promise对象的参数, 则会等待该Promise的状态改变才会传递, 即先要等待依赖的Promise的状态更改后才能改变当前Promise的状态
    • 执行resolve之后,还是会继续执行后面的代码

3. 处理Promise对象:

Promise对象
.then(处理成功的回调函数A,处理失败的回调函数B)
//该回调函数A就会传递给resolve形参,B就会传给reject形参
.then(回调函数A返回Promise对象的回调函数B)
.catch(以上任意一个Promise报错时的回调函数)//catch会捕获任何异常
.finally(无论成功与否,必定执行的回调函数)

1. 说明:

  1. then方法的resolve回调函数形参是必须的
  2. then方法的reject回调函数形参是可选的
    1. 具体要看Promise中有没有需要reject函数
  3. .catch等同于try catch,会捕获promise中任何抛出的异常

判断Promise对象状态

推荐方法:

function decidePromiseState(promise) {
  const t = {};
  return Promise.race([promise, t])
  .then(v => (v === t) ? PROMISE_STATE.PENDING : PROMISE_STATE.FULFILLED)
  .catch(() => PROMISE_STATE.REJECTED)
}

原文

1. 更先进的语法糖:

1. child::async与await关键字

实例

之一

new Promise(resolve => {
    console.log(1);
    resolve(2);//后面还是会继续执行
    setTimeout(() => {
        Promise.resolve().then(() => console.log(7))
        console.log(3);
    }, 0)
    Promise.resolve().then(() => console.log(4))
}).then(num => {
    console.log(num)
});