Promise 例子

function fn() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const n = Math.random();
      n >= 0.5 ? resolve(n) : reject(n);
    }, 2000);
  });
}
 fn().then(val => { console.log(val, 'succeed'); })
    .catch(val => { console.log(val, 'failed'); });

如果then方法里又返回了promise对象,则代码风格会比较散乱,可控性差。

async-await 改造

function fn() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const n = Math.random();
      n >= 0.5 ? resolve(n) : reject(n);
    }, 2000);
  });
}
async function count() {
  try {
    const number = await fn();
    console.log('success', number);
  } catch (errorNumber) {
    console.log('fail', errorNumber);
  }
}
count();
  1. async-await 允许你用同步的代码风格编写异步代码。
  2. async-await 实际上就是 promise 的语法糖,resolve 后的参数会通过 await 赋值给 number , reject 后的参数会赋值 errorNumber。

async-await 用法解释

  1. await 只能在 async 函数内使用
  2. await 后面接一个 promise 对象(或者 return Promise() 的函数)
  3. async-await 没有处理错误的方式,所以需要用 try catch 方式进行错误处理

Oliver
76 声望13 粉丝

Slow Done, Achieve More.