18.同步/异步

1. 同步和异步的区别:

同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。

//同步
first() {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            console.log("111");
            resolve('first');
        }, 3000);
    });
},
second() {
    return new Promise((resolve, reject) => {
        console.log("22");
        resolve();
    });
},
pro() {
    this.first().then(res => {
        console.log(res)
        this.second();
    });
}
//输出:111 first 222

异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理.

//异步
first() {
    setTimeout(function() {
        console.log("111");
    }, 3000);
},
second() {
    console.log("222");
},
pro() {
    this.first();
    this.second();
}
//输出:222 111

 

2. Async/Await:

注意:async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。

Async:声明一个异步函数
1)自动将常规函数转换成Promise,返回值也是一个Promise对象;
2)只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数;
3)异步函数内部可以使用await

Await:暂停异步的功能执行
1)放置在Promise调用之前,await强制其他代码等待,直到Promise完成并返回结果;
2)只能与Promise一起使用,不适用于回调;
3)只能在async函数内部使用;
//异步转同步
async fetched() {
    try {
        let A = await getValueA(); //需要2s
        let B = await getValueB(); //需要4s
        let C = await getValueC(); //需要3s
        return A * B * C; //需要9s
    } catch (e) {
        console.log(e);
    }
}
//用Promise.all()将异步调用并行执行
async fetched() {
    try {
        let A = await getValueA(); //需要2s
        let B = await getValueB(); //需要4s
        let C = await getValueC(); //需要3s
        let result = await Promise.all([getValueA, getValueB, getValueB]); //需要4s
        return result.reduce((total, value) => total * value);
    } catch (e) {
        console.log(e);
    }
}

 

posted @ 2023-07-06 15:35  cjl2019  阅读(31)  评论(0编辑  收藏  举报