js解决回掉地狱方法

501 阅读1分钟

1、事件发布/订阅模式

2、Promise

let promise = new Promise((resolve,reject)=>{
    resolve(“执行成功”);
    reject(“执行失败”);
});
promise.then((data)=>{
      // resolve执行回掉
}).catch(err => {
      // 执行失败回掉
});

3、Generator

function *main() {
    console.log('starting *main()');
    yiled; // 打住,不许往下走了
    console.log('continue yield 1’);
}
let it = main(); 
it.next();
it.next();

4、async

function timeout(ms) {

  return new Promise((resolve, reject) => {

    setTimeout(() => {reject('error')}, 5);  //reject模拟出错,返回error

  });

}
async function asyncPrint(ms) {

  try {

     console.log('start');

     await timeout(ms);  //这里返回了错误

     console.log('end');  //所以这句代码不会被执行了

  } catch(err) {

     console.log(err); //这里捕捉到错误error

  }

}