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
2)只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数;
3)异步函数内部可以使用await
Await:暂停异步的功能执行
1)放置在Promise调用之前,await强制其他代码等待,直到Promise完成并返回结果;
2)只能与Promise一起使用,不适用于回调;
3)只能在async函数内部使用;
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); } }
转载请注明原文链接:https://www.cnblogs.com/chenJieLing/