10. 回调和promise

异步加载 JS
ES5

function loadScript (src, callback) {
  let script = document.createElement('script')
  script.src = src
  script.onload = () => { callback(src) }
  script.onerr = (err) => { callback(err) }
  document.head.append(script)
}

function test (name) {
  console.log(name)
}

loadScript('./1.js', function (script) {
  if (script.message) {
    // 监控上报逻辑
    loadScript('./2.js', function (script) {
      console.log(script)
    })
  } else {
    console.log(script)
    loadScript('./2.js', function (script) {
      console.log(script)
      loadScript('./3.js', function (script) {
        console.log(script)
      })
    })
  }
})

ES6 promise


function loadScript (src) {
  // pending,undefined
  return new Promise((resolve, reject) => {
    let script = document.createElement('script')
    script.src = src
    script.onload = () => resolve(src)// fulfilled,result
    script.onerror = (err) => reject(err)// rejected,error
    document.head.append(script)
  })
}

loadScript('./1.js')
  .then(() => {
    return loadScript('./4.js')
  }, (err) => {
    console.log(err)
  })
  .then(() => {
    loadScript('./3.js')
  }, (err) => {
    console.log(err)
  })


// promise.then(onFulfilled,onRejected)

function test (bool) {
  if (bool) {
    return new Promise((resolve, reject) => {
      resolve(30)
    })
  } else {
    return Promise.reject(new Error('ss'))
  }
}
test(0).then((value) => {
  console.log(value)
}, (err) => {
  console.log(err)
})
function loadScript (src) {
  // pending,undefined
  return new Promise((resolve, reject) => {
    let script = document.createElement('script')
    script.src = src
    script.onload = () => resolve(src)// fulfilled,result
    script.onerror = (err) => reject(err)// rejected,error
    document.head.append(script)
  })
}

loadScript('./1.js')
  .then(() => {
    return loadScript('./2.js')
  })
  .then(() => {
    return loadScript('./4.js')
  })
  .catch(err => {
    console.log(err)
  })
  // throw new Error
const p1 = Promise.resolve(1)
const p2 = Promise.resolve(20)
const p3 = Promise.resolve(3)
// 等待 p1, p2, p3 都执行完成
Promise.all([p1, p2, p3]).then((value) => {
  console.log(value)
})

const p1 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(function () {
      resolve(1)
    }, 1000)
  })
}

const p2 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(function () {
      resolve(2)
    }, 3000)
  })
}
// p1, p2, p3 有一个执行完成
Promise.race([p1(), p2()]).then((value) => {
  console.log(value)
})

学习视频记录

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 首先让我们看看下面这题输出什么? 我们得到的结果是:先输出2,后输出1;这是什么原因呢?大家应该都知道定时器是异步...
    锋享前端阅读 10,970评论 0 0
  • 一、什么是回调 程序里面的任务可以根据执行顺序不同分为同步任务和异步任务两种。 同步任务是指那些没有被引擎挂起的,...
    Zoey_h阅读 5,484评论 0 1
  • 面试题一:https://github.com/jimuyouyou/node-interview-questio...
    R_X阅读 5,623评论 0 5
  • 1、移动端你遇到过什么兼容问题?1、如果在input设置边框颜色在ios系统里会出现兼容性问题,需要在外面加一个d...
    阿帕奇哟阅读 4,314评论 0 8
  • 如何清除浮动,有哪几种方法,区别是什么 1、移动端你遇到过什么兼容问题? 1、如果在input设置边框颜色在ios...
    崽崽不哭阅读 4,162评论 0 1

友情链接更多精彩内容