JavaScript의 모든 곳에서 볼 수 있는 콜백은 프로세스 제어에 있어 재앙이며 단점도 분명합니다.
1. 명시적인 반환이 없으면 중복된 프로세스와 그에 따른 버그가 발생하기 쉽습니다.
2. 코드가 무한히 중첩되어 읽기가 어렵습니다.
위의 문제를 해결하고 피하는 방법에 대해 이야기해 보겠습니다.
첫 번째 문제는 콜백을 사용할 때 종종 return을 사용하는 것을 잊어버리는 경우가 많습니다. 특히 커피 스크립트를 사용할 때 그렇습니다(자바스크립트로 컴파일할 때 자체적으로 최종 결과를 수집하지만). 반환 값으로 사용되지만 이 반환 값이 반드시 원래 의도를 나타내는 것은 아닙니다. 아래 예를 살펴보십시오.
b = ->
console.log '나는 콜백입니다'
a('오류', b)
소위 "오류 우선" 코딩 스타일에서는 오류가 발생할 때 메서드 a의 후속 코드가 계속 실행되는 것을 원하지 않지만 전체 프로세스를 만들기 위해 throw를 사용하고 싶지는 않습니다. hang (그런 일이 발생하더라도 우아해야 한다) 젠장~), 그러면 위 코드는 버그를 생성할 것이다.
한 가지 해결책은 if...else...를 솔직하게 작성하는 것이지만 저는 다음 접근 방식을 선호합니다.
b = ->
console.log '나는 콜백입니다'
a('오류', b)
JavaScript 비동기 메서드의 대부분 반환 값은 쓸모가 없으므로 여기서 return은 프로세스 제어 역할을 하기 위해 사용됩니다. 이는 if...else...보다 코드는 적지만 더 명확합니다.
두 번째 문제는 엄마의 자궁에서 발생하며 근절이 어렵습니다.
좋은 방법은 일부 흐름 제어 모듈을 사용하여 코드를 보다 체계적으로 만드는 것입니다. 예를 들어 async는 반복, 반복 및 일부 조건문을 포함한 일련의 인터페이스를 제공하고 A 대기열도 포함하는 좋은 모듈입니다. 체계. 다음 예는 두 가지 작성 방법의 장단점을 보여줍니다
첫 번째 = (콜백)->
console.log '내가 첫번째 함수다'
콜백()
두 번째 = (콜백)->
console.log '나는 두 번째 기능이다'
콜백()
세 번째 = ()->
console.log '나는 세 번째 기능이다'
첫 번째 ->
두 번째 ->
세 번째()
# 비동기 사용
비동기 = 요구('비동기')
async.waterfall [
먼저
두 번째,
세번째
], (err)->
현명한 사람으로서 당신은 어느 쪽을 선택하시겠습니까?