对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降生的目标都是为了处理“回调地狱”,至于什么是回调地狱:

《对async/await的明白》
Promise革新后:

《对async/await的明白》
async/await革新后:

《对async/await的明白》

    原文作者:MangoGoing
    原文地址: https://segmentfault.com/a/1190000019006291
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞