본문 바로가기
javascript

javascript의 비동기 - 이전 스타일 대 약속 대 RxJS 스케줄러

by it-square 2022. 1. 4.
반응형

이벤트 루프 대기열 - javascript에서 비동기 기능을 제공합니다. 이벤트 대기열에 추가된 작업은 기본 스레드 작업 이후에 실행됩니다.

javascript에서 다른 방법으로 비동기 작업을 실행할 수 있습니다. 그 중 일부는 다음과 같다.

이전 스타일의 콜백 함수:

아래 예에서 콜백은 로드 함수로 전달되며 XMLHtpRequest onload 함수가 실행되면 비동기적으로 호출됩니다(이벤트 큐에 추가됨).

 

약속:

Promise는 콜백 함수를 취하는 .then() 블록을 가지고 있다. 따라서 주 작업 코드 .를 실행한 후 콜백 함수가 비동기적으로 실행됩니다(이벤트 큐에 추가됨).

.the() 콜백 함수가 여러 개 있을 경우 모든 함수는 차례로 실행됩니다. 그러므로 각 .ten() 콜백 함수는 .ten() 콜백 함수에서 작업(api 호출, 빅 데이터 처리 또는 계산 등)이 진행 중인 동안 비동기적으로 실행됩니다.

Promise를 써도 돼요.모두 여러 약속을 병렬로 실행합니다. 한 번의 약속이 실패하면 모든 것이 실패할 것입니다. 다른 Promise 정적 메소드(예: Promise.resolve()), Promise.race() 및 Promise()가 있습니다.단일 약속 또는 개체를 반환하는 모든 설정( 등)입니다.

 

비동기 waitcand 키워드는 약속 위에 구문적 설탕 역할을 한다. 예를 들어, Promise.resolve()는 비동기식 단어와 유사한 Promise 개체를 반환합니다.

wait 키워드를 사용하여 Promise .thean() 또는 여러 .thean() 콜백 함수가 완료/해결되지 않을 때까지 코드 실행을 일시 중지할 수 있습니다. 코드의 최상위 컨텍스트에서는 wait 키워드를 사용할 수 없으며 비동기 작동에서만 유효합니다.

관측 가능한 RxJS 사용:

관측치가 여러 값의 생산자임을 알 수 있듯이 구독할 때 관찰자(소비자)에 "밀어넣기"합니다. 관찰 가능한 것을 Promise로 변환하고 Promise .theen() 블록을 사용하여 비동기적으로 코드를 호출할 수 있습니다.

 

RxJS 7은 Promise()를 Promise 개체로 확인하는 방법을 제공하지만 Promise 개체로 확인되어야 하는 관찰 가능한 값을 선택할 수 있습니다. 관찰 가능한 상태로 대기합니다.첫 번째().약속();

RxJS 8에서 더 이상 사용되지 않는 toPromise() 메서드를 대체하기 위해 wait firstValueFrom(source$) 또는 wait lastValueFrom(source$)을 사용할 수 있습니다.

RxJS 예약 관찰 가능:

RxJS 6.5는 스케줄링하려는 입력 인수(관측 가능, 배열, 약속, 반복 가능 등)와 Scheduler Like의 두 번째 인수 스케줄러(asyncScheduler, asapScheduler, queueScheduler 등)를 취하는 예약된 생성 함수를 도입했다. 다시 돌아올거야, 관찰할 수 있는거지.

스케줄러는 작업을 JavaScript 이벤트 루프 대기열에 올려 비동기식으로 예약합니다. 스케줄러 인수를 자세히 살펴보겠습니다.

 

비동기 스케줄러(asyncScheduler): 작업을 지연하려면 비동기 스케줄러를 사용하십시오. 약속에서 setTimeout((()=> console.logsit works!)`, 2000)을 사용한 것처럼 태스크를 예약합니다. 예:

ASAP 스케줄러(asapScheduler): 이 스케줄러는 태스크를 시간 내에 지연시키는 데 사용할 때 비동기 스케줄러와 동일하게 동작합니다. 비동기 Scheduler와 비교하여 asapScheduler 작업이 먼저 실행됩니다.

대기열 스케줄러(queueScheduler): 지연이 추가되면 asapScheduler와 동일하게 작동하고, 그렇지 않으면 바로 동기식으로 실행됩니다.

RxJS 6.5 이전에는 많은 연산자에서 스케줄러 인수를 사용할 수 있습니다. 스케줄러 인수는 RxJS 8에서 더 이상 사용되지 않습니다. RxJS에서 제공하는 더 이상 사용되지 않는 접근 방식 및 제안된 접근 방식을 보여주는 예를 아래에서 확인하십시오.

 

결론:

시간이 지남에 따라 값을 생성하는 관찰 파일이 있는 경우 RxJS 예약 생성자 함수를 사용하여 비동기 콜백을 예약할 수 있습니다. Obserables가 이미 비동기식이기 때문에 Promise() 또는 firstValueFrommethods를 사용하여 Promise를 해결할 필요가 없으며 예약된 생성자 함수를 제공할 수 있습니다.

읽어주셔서 감사합니다

댓글