js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

使用 Promise 改写回调地狱

Open Sunny-117 opened this issue 3 years ago • 3 comments

let t = setTimeout(() => {
    console.log(111);
    let t1 = setTimeout(() => {
        console.log(222);
        let t2 = setTimeout(() => {
            console.log(333);
        }, 3000);
    }, 2000);
}, 1000);

// todo

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

方式一:promise写法

function myPromise(time, context){
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(context);
      resolve()
    }, time);
  })
}


// promise写法
myPromise(1000, 111)
  .then(() => {
    return myPromise(2000, 222);
  })
  .then(() => {
    return myPromise(3000, 333);
  })

方式二:

function myPromise(time, context){
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(context);
      resolve()
    }, time);
  })
}

// async await写法
async function fun(){
  await myPromise(1000,111);
  await myPromise(2000,222);
  await myPromise(3000,333);
}
fun();

mengqiuleo avatar Jan 17 '23 20:01 mengqiuleo

new Promise((resolve) => {
  setTimeout(() => {
    console.log(111);
    resolve();
  }, 1000);
})
  .then(() => {
    return new Promise(resolve => {
      setTimeout(() => {
        console.log(222);
        resolve();
      }, 2000);
    })
  })
  .then(() => {
    setTimeout(() => {
      console.log(333);
    }, 3000);
  });

tyust512 avatar Nov 15 '23 01:11 tyust512

const p = new Promise(resolve => { setTimeout(() => { console.log(111); resolve() }, 1000) })

p.then(() => { return new Promise(resolve => { setTimeout(() => { console.log(222); resolve() }, 2000) }) }).then(() => { return new Promise(resolve => { setTimeout(() => { console.log(333); resolve() }, 3000) }) })

GISpjd avatar Jul 19 '24 07:07 GISpjd