1. // 构造
  2. let p = new Promise((resolve, reject) => {
  3. // ...
  4. })
  5. // 使用
  6. p.then(() => {
  7. // ..
  8. }).catch(err => {
  9. // ..
  10. })

一些思考

1、resolve()、reject()时需不需要加上return?

  1. let p = new Promise((resolve, reject) => {
  2. if(...) {
  3. return resolve()
  4. } else {
  5. return reject()
  6. }
  7. })

一般来说,是 推荐 resolve()reject() 后加上 return 的;
虽然 returnPromise 在被 resolve 或者 reject 处理后的状态没有影响,但是,它可以可以避免执行后续不必要的代码,这是一个 比较好的编程习惯

2、Promise 与 setTimeout/setInteral 的执行顺序

  1. setTimeout(() => {
  2. console.log('timeout')
  3. }, 0)
  4. Promsie.resolve(42).then(() => {
  5. console.log('promise')
  6. })
  7. // promise
  8. // timeout

Promise 会先执行
Promise 属于 微任务,setTiemout 属于 宏任务,微任务 执行优先级高于 宏任务。