27. Either函子

1/27/2023 js

# Either函子

class Left {
  static of (value) {
    return new Left(value)
  }
  constructor(value) {
    this._value = value
  }

  map() {
    return this
  }
}

class Right {
  static of (value) {
    return new Right(value)
  }
  constructor(value) {
    this._value = value
  }

  map(fn) {
    return new Right(fn(this._value))
  }
}

let r1 =  Left.of(12).map(item => item + 2)
let r2 =  Right.of(12).map(item => item + 2)
console.log('r1', r1)  // r1 Left { _value: 12 }
console.log('r1', r2)  // r2 right { _value: 14 }


function parseJSON(str) {
  try {
    return Right.of(JSON.parse(str))
  } catch(e) {
    return Left.of({error: e.message})
  }
}

let r3 = parseJSON('{name: zs}')
console.log('r3', r3)  // r3 Left { _value: { error: 'Unexpected token n in JSON at position 1' } }

// let r4 = parseJSON('{"name": "zs"}')
let r4 = parseJSON('{"name": "zs"}')
          .map(item => item.name.toUpperCase())
console.log('r4', r4)  // r4 Right { _value: 'ZS' }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
最近更新时间: 2/4/2023, 10:01:08 AM
강남역 4번 출구
Plastic / Fallin` Dild