什么是同步?
我们编写的JavaScript代码实际上是单线程的程序,那就决定了我们的代码是一行一行的顺序执行的,处理一些简短、快速的运算操作时主线程就够了,如果在同步程序中发送了网络请求,如果超时了,下面的代码依赖于网络请求,那么整个网页将会失去响应。
什么是异步?
而异步的概念则与同步恰恰相反,一个异步过程的执行将不再与原有的序列有顺序关系,特别是对发送网络请求,不确保响应时间时候,异步是最优选择,网络请求无论多长时间,程序将不会在此等待,直接走下面的代码,等异步的请求有了响应,主线程几乎不用关心异步任务的状态了,自己完成回调后续的操作,程序间互不影响。
简单来理解:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。
此外,
await/async,这两个命令是成对出现的。一般与Promise一起使用(await后面接promise对象),它们能够更好地处理异步操作和返回结果。如果返回的不是Promise对象,await将自动将其包装在一个已解决的Promise中。
function fetchData() {
return new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
const data = 'Hello, World!';
resolve(data);
}, 2000);
});
}
async function getData() {
try {
const result = await fetchData(); // 等待fetchData函数返回的Promise对象
console.log(result); // 输出:Hello, World!
return 'Done'; // 返回一个普通的值
} catch (error) {
console.log(error);
}
}
getData().then((value) => {
console.log(value); // 输出:Done
});
总结:如果涉及到网络请求没有依赖关系的话,异步请求是效率最高的,但是下一个的方法或者逻辑依赖于上一个网络请求的结果,那么就必须使用await命令,将异步结果等待返回之后再执行后面的代码。