javaScript異步編程

作者:酸菜牛肉 文章內(nèi)容輸出來源:拉勾教育大前端高薪訓(xùn)練營課程

內(nèi)容概要 ###:

  1. 同步模式與異步模式
  2. 時間循環(huán)與消息隊列
  3. 異步編程的幾種方式
  4. Promise 異步編程、宏任務(wù)/微任務(wù)隊列
  5. Generator 異步方案、Async/Await語法糖

一 、同步模式與異步模式

異步模式

回調(diào)函數(shù): 由調(diào)用者定義, 由執(zhí)行者執(zhí)行

function foo (callback){
  setTimeout(function(){
    callback()
  }, 3000)
}
foo(function(){
  console.log('這個一個回調(diào)函數(shù)');
  console.log('由調(diào)用者定義, 由執(zhí)行者執(zhí)行');
  console.log('其實就是調(diào)用者告訴執(zhí)行者異步任務(wù)結(jié)束之后應(yīng)該做什么')
})
Promise
Promise概念
const promise = new Promise((resolve, reject) => {
    resolve(100);
    // reject(new Error("promise rejected"));
})

promise.then((data)=> {
    console.log(data);
}, (error) => {
    console.log(error)
})
console.log("end")
  • Promise 對象的then方法會返回一個全新的Promise對象
  • 后面的then方法就是在為上一個then返回的promise注冊回調(diào)
  • 前邊then方法中回調(diào)函數(shù)的返回值會作為后面then方法回調(diào)的參數(shù)
  • 如果回調(diào)中返會的是Promise,那后邊then方法的回調(diào)會等待他的結(jié)束
    Promise的串行與并行
const ajax = (url) => {
    return new Promise((resolve, reject)=>{
        if(url.startsWith('api')){
        
            resolve(1000);
        }else{
            reject(new Error('url api is error'))
        }
        
    })
}
//并行執(zhí)行
const promise = Promise.all([
    ajax('api'),
    ajax('api')
])

//串行執(zhí)行
//ajax('api').then(data=>{
//  const urls = Object.values(data)
//  const tasks = urls.map(url => ajax(url))
//  return new Promise.all(tasks);
//}).then(values=>{
//  console.log(values)
//})

promise.then(data=>{
    console.log(data);
}).catch(error=>{
    console.log(error)
})

Promise.all()等待所有promise的任務(wù)同時執(zhí)行完成會返回一個新的Promise的對象
Promise.rece()等待第一個promise的任務(wù)執(zhí)行完成返回一個新的Promise的對象

作者:酸菜牛肉 文章內(nèi)容輸出來源:拉勾教育大前端高薪訓(xùn)練營課程

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

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