对async/await的理解
async 函数
先看看MDN上怎么介绍的:
async function 声明用于定义一个返回 AsyncFunction 对象的异步函数。异步函数是指通过事件循环异步执行的函数,它会通过一个隐式的 Promise 返回其结果。但是如果你的代码使用了异步函数,它的语法和结构会更像是标准的同步函数。
- 如果async函数中是return一个值,这个值就是Promise对象中resolve的值;
- 如果async函数中是throw一个值,这个值就是Promise对象中reject的值。
async函数的写法
async function imAsync(num) { if (num > 0) { return num // 这里相当于resolve(num) } else { throw num // 这里相当于reject(num) } } imAsync(1).then(function (v) { console.log(v); // 1 }); // 注意这里是catch imAsync(0).catch(function (v) { console.log(v); // 0 })
Promise的写法
function imPromise(num) { return new Promise(function (resolve, reject) { if (num > 0) { resolve(num); } else { reject(num); } }) } imPromise(1).then(function (v) { console.log(v); // 1 }) imPromise(0).then(function (v) { console.log(v); // 0 })
await
await会暂停当前async函数的执行,等待后面的Promise的计算结果返回以后再继续执行当前的async函数。
如果单纯的 await setTimeout(...)是行不通的,await 不是什么都等,它等待的只是Promise,你如果没有给他返回个Promise,那它还是会继续向下执行。
所以 await 等待的不是所有的异步操作,等待的只是Promise。
总结
async/await是在Promise之后产生的,它和Promise诞生的目的都是为了解决“回调地狱”,至于什么是回调地狱:
Promise改进后:
async/await改进后:
相关推荐
89500297 2020-06-07
陈旭阳 2020-06-02
前端开发Kingcean 2020-05-29
Magicsoftware 2020-03-28
Bonrui编程路 2020-06-07
niehanmin 2020-05-19
Magicsoftware 2020-03-28
LorenLiu 2020-03-28
lyg0 2020-02-18
88520191 2020-01-30
前端开发Kingcean 2020-01-23
csuzxm000 2020-01-10
whynotgonow 2020-01-05
89500297 2020-01-03
88520191 2019-12-30
Trustport 2019-12-16
wujiajax 2014-01-13