模块一作业

75 阅读2分钟

1.异步编程:js的代码为单线程,从先往后同步执行。在其中会产生一些异步操作,如setTimeOut、dom事件绑定,这些会放入异步队列,等待同步代码执行完毕后再来执行。

eventloop是js的事件循环机制,先执行整体同步代码,然后将异步代码放入消息队列排队,等待同步代码执行完毕,然后一次执行消息队列的任务。

整体代码可看做宏任务,和一些异步任务如setTimeOut、setInterval也是宏任务,宏任务的执行顺序是一个宏任务执行完成后,检查当前宏任务产生的微任务先执行,然后再执行下一个宏任务。

微任务:由宏任务执行途中产生,会放入消息队列中。如:promise.then(),mutationObserver,process.nextTick

一、

let promise = new Promise((resolve, reject) => {
  resolve('成功:')
  // reject('失败')
})

promise.then(value => {
  let a = 'hello'
  return value + a
}).then(value => {
  let b = ' lagou'
  return value + b
}).then(value => {
  let c = ' i love u'
  console.log(value + c)
})

二、练习一

const fp = require('lodash/fp')

let isLastInstock = fp.flowRight(fp.prop('in_stock'), fp.last)
console.log(isLastInstock(cars))

练习二、

const fp = require('lodash/fp')

let isFirstName = fp.flowRight(fp.prop('name'), fp.first)
console.log(isFirstName(cars))

练习三、

let getaverageCars = fp.flowRight(_average, fp.map((car) => car.dollar_value))
console.log(getaverageCars(cars))

练习四、

let sanitizeNames = fp.flowRight(_underscore, fp.join(' '), fp.map(fp.toLower), fp.split(' '))
console.log(sanitizeNames(['Hello World']))

二、练习一

const fp = require('lodash/fp')
const { Container, Maybe } = require('./support.js')

// 使用异步编程函数来使函子里面的值改变
let maybe = Maybe.of([5, 6, 1])
let ex1 = (x) => {
  x = fp.map(value => {
    return fp.add(value, 1)
  }, x)
  return x
}
console.log(maybe.map(x => ex1(x)))

练习二、

const fp = require('lodash/fp')
const { Container, Maybe } = require('./support.js')

let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = (x) => {
  return fp.first(x)
}
console.log(xs.map(x => ex2(x)))

练习三、

const fp = require('lodash/fp')
const { Container, Maybe } = require('./support.js')

// 练习三,使用safeProp和fp.first找到user的name首字母
// curry柯里化函数:若参数不满足,可返回函数接收剩余参数
let safeProp = fp.curry(function (x, o) {
  return Maybe.of(o[x])
})
let user = {id: 2, name: 'Albert'}
let ex3 = (x) => {
  return fp.first(x)
}
console.log(safeProp('name', user).map(x => ex3(x)))

练习四、

const { Container, Maybe } = require('./support.js')

// 练习四:使用Maybe重写ex4函数
// let ex4 = function (n) {
//   if (n) {
//     return parseInt(n)
//   }
// }
let ex4 = Maybe.of('1')
console.log(ex4.map(x => {return parseInt(x)}))

手写promise

promise1.PNG

promise2.PNG

promise3.PNG

promise4.PNG

promise5.PNG