1.使用回调函数解决异步问题

1
2
3
4
5
6
7
8
9
10
11
12
function eat(callback){
console.log("吃饭");
setTimeout(() => {
callback();
}, 3000);
}

function sing(){
console.log("唱歌")
}

eat(sign);

2.使用Promise解决异步问题

1
2
3
4
5
6
7
8
new Promise(function (resolve, reject) {
setTimeout(() => {
console.log('吃饭')
resolve('吃好饭了')
}, 3000)
}).then(function (msg) {
console.log(msg, '去唱歌')
})

3.使用async和await解决异步问题

1
2
3
4
5
6
7
8
async是用来修饰方法的,加上async修饰的方法有三个作用
1.在该方法内部可以使用await关键字
2.该方法需要会默认返回一个Promise
3.async修饰的方法表示异步方法,不会堵塞当前线程的执行

await是用来等待Promise执行的结果的,await后面需要跟一个Promise
1.可以将原来的异步变成同步任务
2.只可以在async修饰的方法中使用

以读取文件为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const fs = require('fs');

function myread(path){
return new Promise(function(resolve,reject){
fs.readFile(path,function(err,data){
resolve(data.toString())
})
})
}

async function test1(){
//这边是堵塞了,按照串行化执行
let result1 = await myread("./a.json");
console.log(result1)
let result2 = await myread("./b.json");
console.log(result2)
let result3 = await myread("./c.json");
console.log(result3)
}

test1()
.then(function(msg){
console.log(msg)
});