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 @   cjl2019  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示