阻塞式的执行有其弊端,即执行完之后,必须等对方返回结果。这种方式的调用我们也称之为:同步调用。同步的优势在于实时性强、能立马得到结果,缺点就是性能较差,阻塞等待结果。
而异步调用,就很好的解决了这个问题,这里我们模拟一个:查询用户的等待异步执行的效果。
util.js
function sum(a, b) {
return a + b;
}
function getUser()
{
return new Promise(resolve => setTimeout(() => resolve('张三'), 1000))
}
module.exports = { sum, getUser };
然后定义一个新的调用函数,以便做接口测试
getUser.js
const { getUser } = require('./util');
// 使用 async/await 方式调用异步函数
async function fetchUser() {
try {
const user = await getUser();
console.log('获取到用户:', user);
} catch (error) {
console.error('获取用户失败:', error);
}
}
fetchUser();
解释一下这里的三个核心关键词的作用
●
Promise:给一步函数打包,统一返回结果。类似于点单之后拿到取餐号
●
async:声明一下我这个函数式有一步操作,给函数打个标签,内部有一个等待的异步操作
●
await:等取餐号叫到你拿到结果。只能在async修饰的函数里,等Promise完成,拿到 resolve的结果
异步操作(如数据库查询) → 用 Promise 封装 → 在 async 函数里用 await 等待 → 优雅拿到结果/捕获错误