10. 回調(diào)和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) {
    // 監(jiān)控上報邏輯
    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 都執(zhí)行完成
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 有一個執(zhí)行完成
Promise.race([p1(), p2()]).then((value) => {
  console.log(value)
})

學習視頻記錄

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 首先讓我們看看下面這題輸出什么? 我們得到的結(jié)果是:先輸出2,后輸出1;這是什么原因呢?大家應該都知道定時器是異步...
    鋒享前端閱讀 5,751評論 0 0
  • 一、什么是回調(diào) 程序里面的任務可以根據(jù)執(zhí)行順序不同分為同步任務和異步任務兩種。 同步任務是指那些沒有被引擎掛起的,...
    Zoey_h閱讀 1,644評論 0 1
  • 面試題一:https://github.com/jimuyouyou/node-interview-questio...
    R_X閱讀 1,776評論 0 5
  • 1、移動端你遇到過什么兼容問題?1、如果在input設置邊框顏色在ios系統(tǒng)里會出現(xiàn)兼容性問題,需要在外面加一個d...
    阿帕奇喲閱讀 919評論 0 8
  • 如何清除浮動,有哪幾種方法,區(qū)別是什么 1、移動端你遇到過什么兼容問題? 1、如果在input設置邊框顏色在ios...
    崽崽不哭閱讀 829評論 0 1

友情鏈接更多精彩內(nèi)容