前端训练营part1-1作业答案

本文介绍了JavaScript的异步编程原理,包括同步任务、异步任务、宏任务和微任务,以及EventLoop时间循环。同时,通过Promise和函数式编程库fp的实例,展示了如何改进异步操作和实现函数组合。
摘要由CSDN通过智能技术生成

简答题
一、js异步编程实际是将部分js代码的执行滞后。js是单线程的,如果没有异步,对于某些耗时较大的操作,如异步获取数据,IO操作等,js将等待操作完成再执行下面的代码,这样会造成界面卡顿、白屏等现象。而js的异步编程就是用来解决这个问题的。
js在执行时,会将js代码解析成一个一个任务,然后依次执行。任务分为同步任务和异步任务。

  • 同步任务
    js在执行同步任务时会将任务添加到执行栈中并立即执行,等待任务执行完成之后再将其从执行栈中弹出。
  • 异步任务
    js在执行异步任务时,会经过相应的处理模块处理之后添加到任务队列中(也称消息队列)。在执行栈为空时,会从任务队列头部取出一个任务放到执行栈中执行,执行完成之后将其从执行栈中弹出。执行栈为空之后,会再次从任务队列里头部取出一个任务放到执行栈中执行,这个过程称为时间循环(即EventLoop)。

异步任务又分为宏任务和微任务

  • 宏任务:需要进入到任务队列中重新排队的任务,如setTimeout、setInterval等
  • 微任务:不需要重新进入到任务队列中重新排队的任务,如Promise、MutationObserver以及node中的process.nextTick。

执行栈为空之后,首先会从微任务队列中取出任务执行,待微任务队列为空之后再从宏任务队列中取出任务执行。
代码题
一、
1、使用Promise改进setTimeout

const p = val => new Promise((resolve, reject) => {
   
  setTimeout(() => {
   
    resolve(val)
  }, 10)
});

p('hello').then(val => {
   
  return p('lagou').then(value => val + value)
}).then(val => {
   
  return p('I ♥ U').then(value => val + value)
}).then(console.log);

二、
1、使用fp.flowRigth重新实现isLastInStock

const isLastInStock = fp.flowRight(fp.props('in_stock'), fp.last);

2、使用fp.flowRight、fp.props、fp.first获取第一个car的name

const isFirstInName = fp.flowRight(fp.props('name'), fp.first);

3、使用函数组合实现averageDollarValue

const averageDollarValue1 = fp.flowRight(_average, fp.map(car => {
   
  return car.dollar_value;
}));

4、使用fp.flowRight实现一个能让数组中name的转换为下划线连接的小写字母字符串

const sanitizeNames = fp.map(fp.flowRight(_underscore, fp.lowerCase, car => car.name));

三、
1、使用fp.add和fp.map创建一个能让functor里面的值增加的函数

const ex1 = (y) => {
   
  return maybe.map(fp.map(fp.add(y)));
}

2、使用fp.first获取列表的首字母

const ex2 = () => {
   
  return xs.map(fp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值