这是我参与更文挑战的第二十八天,活动详情查看:更文挑战
-
async fnction
是Promise
的语法糖封装 -
异步编程的终极解决方案-以同步的方式写异步
await
关键字可以”暂停 ⏸”async function
的执行await
关键字可以同步获取Promise
的执行结果try catch
可以捕获await
的错误
-
一个穿越事件循环的 function- 可以在多个事件循环之间的代码进行联系 ????
async function 是 Promise 的语法糖封装
const a = async function () {
return 1;
};
const b = function () {
return new Promise((resolve, reject) => {
resolve(1);
});
};
console.log(a());
console.log(b());
复制代码
const aa = async function () {
throw new Error("1");
};
const bb = function () {
return new Promise((resolve, reject) => {
resolve(new Error("1"));
});
};
console.log(aa());
console.log(bb());
复制代码
async/await 用同步的方式写异步代码
(function () {
const result = (async function () {
const content = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve("content-res");
}, 500);
});
console.log("content", content);
return 4;
})();
setTimeout(() => {
console.log("result", result);
}, 800);
})();
复制代码
await
会等待 后面的 Promise
的状态变更,当获得结果之后,才会执行下一行的代码
try catch 可以捕获到 async/await 异步任务的错误
(function () {
const result = (async function () {
let content = null;
try {
content = await new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("fail"));
}, 500);
});
} catch (error) {
console.log("error", error);
}
console.log("content", content);
return 4;
})();
setTimeout(() => {
console.log("result", result);
}, 800);
})();
复制代码
改造多轮面试代码-串行
// round 面试第几轮
function interview(round) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
if (Math.random() > 0.2) {
// resolve, reject 只能接受一个参数
resolve("success");
} else {
const error = new Error("fail");
reject({ round, error });
}
}, 500);
});
}
(async function () {
try {
await interview(1);
await interview(2);
await interview(3);
} catch (error) {
console.log(`第${error.round}轮面试失败了`);
return;
}
console.log("每轮面试都成功!?");
})();
复制代码
实现并行
//
function interview(name) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
if (Math.random() > 0.2) {
// resolve, reject 只能接受一个参数
resolve("success");
} else {
const error = new Error("fail");
reject({ name, error });
}
}, 500);
});
}
(async function () {
try {
await Promise.all([
interview("tenxun"),
interview("ali"),
interview("huawei"),
]);
} catch (error) {
console.log(`面试${error.name}失败了`);
return;
}
console.log("每个公司面试都成功!?");
})();
复制代码
最后
文章浅陋,欢迎各位看官评论区留下的你的见解!
觉得有收获的同学欢迎点赞,关注一波!
往期文章
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END