# 1、回调函数(callback)

  回调函数是把函数作为值,传递给另外一个函数,在另外一个函数执行的时候,再把传递进来的函数进行处理。 缺点:

  • 回调地狱。
  • 缺乏顺序性,导致调试困难。
  • 嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身。
  • 嵌套函数过多的话,很难处理错误。
function test(a,callback){
    callback&&callback();
}
1
2
3

# 2、生成器(generator)

特点: 可以控制函数的执行。

function query(interval) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(interval);
    }, interval);
  });
}
function* generator() {
  let value;
  value = yield query(1000);
  console.log("第一个请求", value);
  value = yield query(2000);
  console.log("第一个请求", value);
  value = yield query(3000);
  console.log("第一个请求", value);
}
let iterator = generator();
iterator.next().value.then((value) => {
    iterator.next(value).value.then(value=>{
        iterator.next(value).value.then(value=>{
            iterator.next(value);
        })
    });
});

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 3、Promise

Promise的优点:

  • 将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。

Promise的不足:

  • 1、无法取消Promise,一旦新建它就会立即执行,无法中途取消。
  • 2、如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
  • 3、当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
const promise=new Promise((resolve,reject)=>{
    resolve(10);
})
promise.then(res=>{
    console.log(res);
})
1
2
3
4
5
6

# 4、async/await

优点: 代码清晰。将异步变成了同步。

function query(interval) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(interval);
    }, interval);
  });
}
async function test(){
    try{
      const value = await query(1000);
      return value;
    }catch(err){
        console.log(err)
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Last Updated: 8/30/2021, 12:10:02 AM