저는 Bacon.js의 초보자이며 일반적으로 하스켈에서 프로그램을 작성합니다. Haskell에 대한 저의 경험으로 Bacon.js의 일부 상황을 순전히 기능적 방식으로 설명하고자합니다.Bacon.js의 부작용에 대처하십시오.
다음은 예제 상황입니다.
triggerStream
은 원본 스트림입니다.resultStream
은triggerStream
의 이벤트가 발생하면 아약스 액세스를 시도합니다.resultStream2
또한resultStream
의 아약스 액세스가 완료된 후 아약스 액세스를 시도합니다. (가)### ======= # Streams # ======= ### triggerStream =() -> Bacon.fromArray([1,2,3]) resultStream = triggerStream() .flatMap((n) -> Bacon.fromPromise($.ajax(toAjax n))) .zip(triggerStream(), (r,t) -> {result: r, trigger: t} resultStream2 = resultStream # (*) .flatMap((o) -> Bacon.fromPromise($.ajax(toAjax2 o))) .zip(resultStream, (r2,r1) -> {result: r2, trigger: r1.trigger} ### ======= # Assignments # ======= ### triggerStream() .onValue(beforeAjax1) # (a) resultStream .onValue(afterAjax1) # (b) resultStream2 .onValue(afterAjax2) # (c)
각 트리거 이벤트 후에 실행하는 supporsed되어
는, 즉이resultStream
의 아약스 액세스하기 전에 실행되는 것 :
이 내 접근 방식입니다.
(b)는 resultStream
의 아약스 액세스 이후에 해고되는 것으로 간주됩니다.
(c)는 resultStream2
의 아약스 액세스 이후에 시작되도록 허용됩니다.
Bacon.js의 스트림이나 속성이 자체적으로 부작용이 있으므로 내 코드가 제대로 작동하지 않습니다. (b)에서 resultStream
의 이벤트가 resultStream
개체에서 제거되어 (*)에서 빈 스트림이 발생합니다.
resultStream
을 (triggerStream
과 같은) 솔기로 변경하는 접근법은 잘 작동하지만 (b) 및 (c) 때 resultStream
의 아약스 액세스가 독립적으로 두 번 발생합니다.
내 접근 방식을 실현할 생각이 있습니까?
문제는 당신이 소스로 Bacon.fromArray를 사용하는에 있습니다
또한 Bacon.js FAQ를 참조하십시오. Bacon.fromArray는 첫 번째 구독자에게 내용을 알려주는 의미에서 약간 펑키 한 동작을 갖는 스트림을 반환합니다. Bacon과 같은 좀 더 현실적인 소스를 시도해 볼 수도 있습니다. – raimohanska
Bacon.fromArray에 관한 사실은 저에게있어서 새로운 것입니다. 정말 고마워! 하지만 아직 작동하지 않는 것 같습니다 ... onValue() at (b)는 모든 스트림을 먹고 (c)는 작동하지 않습니다. – user3749167
미안하지만, 오해했습니다. 당신은 일했습니다. 굉장해! – user3749167