javaScript异步编程

作者:酸菜牛肉 文章内容输出来源:拉勾教育大前端高薪训练营课程

内容概要 ###:

  1. 同步模式与异步模式
  2. 时间循环与消息队列
  3. 异步编程的几种方式
  4. Promise 异步编程、宏任务/微任务队列
  5. Generator 异步方案、Async/Await语法糖

一 、同步模式与异步模式

异步模式

回调函数: 由调用者定义, 由执行者执行

function foo (callback){
  setTimeout(function(){
    callback()
  }, 3000)
}
foo(function(){
  console.log('这个一个回调函数');
  console.log('由调用者定义, 由执行者执行');
  console.log('其实就是调用者告诉执行者异步任务结束之后应该做什么')
})
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注册回调
  • 前边then方法中回调函数的返回值会作为后面then方法回调的参数
  • 如果回调中返会的是Promise,那后边then方法的回调会等待他的结束
    Promise的串行与并行
const ajax = (url) => {
    return new Promise((resolve, reject)=>{
        if(url.startsWith('api')){
        
            resolve(1000);
        }else{
            reject(new Error('url api is error'))
        }
        
    })
}
//并行执行
const promise = Promise.all([
    ajax('api'),
    ajax('api')
])

//串行执行
//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的任务同时执行完成会返回一个新的Promise的对象
Promise.rece()等待第一个promise的任务执行完成返回一个新的Promise的对象

作者:酸菜牛肉 文章内容输出来源:拉勾教育大前端高薪训练营课程

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

友情链接更多精彩内容