模块一:函数式编程与JS 异步编程、手写Promise

模块一:函数式编程与JS 异步编程、手写Promise

简答题

一、谈谈你是如何理解JS异步编程的, EventLoop、消息队列都是做什么的, 什么是宏任务,什么是微任务?

代码题

一、将下面异步代码使用Promise 的方式改进

setTimeout(function () {
var a = 'hello'
setTimeout(function () {
var b = 'lagou'
setTimeout ( function
() {
var c= 'I ❤ U'
console. log(a + b + c)
}10)
}10)
}10)

二、基于以下代码完成下面的四个练习

const fp = require( ' lodash/fp')
//数据
// horsepower 马力,dollar_ value 价格,
in_ stock库存
const cars
=[
{ name: ' Ferrari FF', horsepower: 660,
dollar_ value: 700000, in_ stock: true }{ name: ' Spyker
: C12 Zagato',
horsepower:
: 650,dollar_ _value:
648000,
in_ stock: false },
{ name: ' Jaguar XKR-S', horsepower :
550,dollar_ value: 132000,in_ stock:
false }{ name: ' Audi R8', horsepower: 525,
dollar_ value: 114200, in_ stock: false },
{ name: ' Aston Martin 0ne-77',
horsepower: 750, dollar_ value: 1850000,
in_ stock: true }{ name:' Pagani Huayra', horsepower :
700,dollar_ _value: 1300000, in_ stock:
false }]

练习1:使用函数组合fp.flowRight()重新实现下面这个函数

let isLastInStock = function
(cars) {
//获取最后一条数据
let last_ car = fp.last (cars)
//获取最后一条数据的in stock 属性值
return fp.prop( ‘in_ stock’, last_ car)
}

练习2:使用fp.flowRight()、fp.prop() 和fp.first() 获取第一个car的name

练习3:使用帮助函数。average 重构averageDollarValue,使用函数组合的方式实现

Let average = function (xs) {
return fp.reduce(fp.add, 0,xs) /
Xs . length
} // <-无须改动
let averageDollarValue = function (cars )
{
let dollar
values = f
fp.map( function
(car) {
return car . dollar_ value
},cars)
return_ average (dollar_ values)
}

**练习4:使用flowRight写- -个sanitizeNames()函 数,返回一个下划线连接的小写字符串,把数组中的name转换为这种形式:
例如: sanitizeNames([" Hello World" ]) => [“hello world”]

let underscore = fp. replace(/W+/g, ‘_’) // <-- 无须改动,并在sanitizeNames
中使用它**

三、基于下面提供的代码,完成后续的四个练习

// support.js
class Container {
static of (value) {
return new Container (value)
r(
}
constructor(value) {
this._ value = value
}
map(fn) {
return Container.of( fn(this._ value))
}
}
class Maybe {
static of(x) {
return new Maybe(x)
}
isNothing() {
return this.
value
null |l
this.
value

=一一=
undefined
}
constructor(x) {
this.
value = x
}
map(fn) {
return this. isNothing() ? this :
Maybe .of (fn(this. _value))
}
}
module. exports = { Maybe,
Container }

练习1:使用fp.add(x, y)和fp.map(f, x)创建一个能让functor里的值增加的函数ex1

// app.js
const fp
= require( ’ lodash/fp’ )
const { Maybe, Container }
require(’ ./support’ )
let maybe = Maybe.of([5, 6,1])
letex1=()=>{
//你需要实现的函数。。。
}

练习2:实现-一个函数ex2,能够使用fp.first获取列表的第一一个元素

// app.js
const fp = require(‘lodash/fp’)
(
const { Maybe, Container
”}
require(’./support’ )
let Xs = Container.of([‘do’ ,‘ray’,
‘me’, ‘fa’, ‘so’, ‘la’, ‘ti’, ‘do’ ])
let ex2 =
() =>{
//你需要实现的函数。。。
}

练习3:实现一个函数ex3,使用safeProp和fp.first找到user的名字的首字母

// app.js
const fp
) = require( ‘lodash/fp’)
const { Maybe,
Container }
require( ’ ./support’ )
let safeProp
= fp.curry( function
(x, o)
{
return Maybe.of (o[x] )
})
let user = { id: 2,name: ’ Albert’ }
let ex3 =
()
)= >
{
//你需要实现的函数。
}

练习4:使用Maybe重写ex4,不要有if语句

// app.js
const fp = require( ‘lodash/fp’ )
const { Maybe,
Container }
require(’./support’)
let ex4 = function (n) {
if (n) {
return parseInt(n)
}
}

四、手写实现MyPromise源码 要求:尽可能还原Promise中的每-一个API,并通过 注释的方式描述思路和原理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值