Node.js를 Generators & 콜백과 비교

이 튜토리얼에서 우리는 다음에 대해 배울 것입니다 Generator콜백과의 차이점

무엇인가 generators?

Generator꽤 유명해졌지 Node.js를 최근에는 아마도 그들이 할 수 있는 일 때문일 것입니다.

  • Generators are function executions that can be suspended and resumed at a later 포인트.
  • Generators는 '지연 실행'과 같은 개념을 수행할 때 유용합니다. 이는 기본적으로 실행을 일시 중지하고 마음대로 재개함으로써 필요할 때만 값을 가져올 수 있음을 의미합니다.

Generator아래의 2가지 주요 방법이 있습니다.

  1. 수확량 방법 – 함수 내에서 Yield 메소드를 호출하여 Yield 메소드가 호출된 특정 라인에서 함수의 실행을 정지합니다.
  2. 다음 방법 – 이 메소드는 양보 메소드가 있는 함수의 실행을 재개하기 위해 기본 애플리케이션에서 호출됩니다. 함수 실행은 다음 항복 메서드나 메서드가 끝날 때까지 계속됩니다.

방법의 예를 살펴 보겠습니다. generators를 사용할 수 있습니다.

이 예에서는 2개의 숫자를 추가하는 간단한 Add 함수를 사용하겠지만, 방법을 보여주기 위해 여러 지점에서 메서드 실행을 계속 중지할 것입니다. generators를 사용할 수 있습니다.

Node.js를 Generators

function* Add(x) {
   yield x + 1;
   var y = yield(null);
   y = 6
   return x + y;
}

var gen = Add(5);

gen.next();

gen.next(); 

코드 설명

  1. 첫 번째 단계는 우리의 generator "기능". 이는 function 키워드에 "*"를 추가하여 수행됩니다. 그런 다음 x 매개변수를 사용하는 Add라는 함수를 정의합니다.
  2. Yield 키워드는 다음에 특정합니다. generator에스. 이는 작업 중간에 기능을 일시 중지하는 강력한 구성이 됩니다. 따라서 여기에서는 Step4에서 수행될 next() 함수를 호출할 때까지 함수 실행이 중단됩니다. 이 시점에서 x의 값은 6이 되고 함수의 실행이 중지됩니다.
  3. 이곳이 우리가 처음으로 전화하는 곳입니다. generator 함수를 추가하고 값 5를 Add 함수로 보냅니다. 이 값은 Add 함수의 x 매개변수로 대체됩니다.
  4. next() 함수를 호출하면 Add() 함수가 실행을 재개합니다. 다음 문 var y=yield(null)이 실행되면 Add() 함수는 다시 실행을 중지합니다.
  5. 이제 next() 함수를 다시 호출한 후 다음 문이 실행되고 x=5와 y=6의 결합된 값이 추가되어 반환됩니다.

콜백과 콜백 generators

Generators는 콜백 지옥이라는 문제를 해결하는 데 사용됩니다. Node.js 애플리케이션을 개발하는 동안 콜백 함수가 너무 중첩되어 콜백 함수를 사용하기가 너무 복잡해지는 경우가 있습니다.

여기는 generator유용합니다. 이에 대한 가장 일반적인 예 중 하나는 타이머 함수를 생성할 때입니다.

아래 예를 통해 방법을 살펴보겠습니다. generators는 콜백보다 유용할 수 있습니다.

우리의 예에서는 간단한 시간 지연 함수를 생성할 것입니다. 그런 다음 1000, 2000 및 3000ms의 지연을 통합하여 이 함수를 호출하려고 합니다.

단계 1) 필요한 시간 지연 코드로 콜백 함수를 정의합니다.

콜백과 콜백 Generators

function Timedelay(ptime, callback) {

setTimeout(function() {
  
    callback("Pausing for " + ptime);
    
  }, time);
}

코드 설명

  1. 여기서는 ptime이라는 매개변수를 사용하여 Timedelay라는 함수를 만듭니다. 애플리케이션에 도입하려는 필요한 시간 지연이 발생합니다.
  2. 다음 단계는 애플리케이션이 몇 밀리초 동안 일시 중지될 것임을 알리는 메시지를 사용자에게 표시하는 것입니다.

단계 2) 이제 콜백을 통합하는 경우 코드를 살펴보겠습니다. 1000, 2000 및 3000밀리초 값을 기반으로 콜백을 통합한다고 가정하면 아래 코드는 콜백을 사용하여 이를 구현하는 방법을 보여줍니다.

콜백과 콜백 Generators

Timedelay(1000, function(message) {
  
  console.log(msg);
  Timedelay(2000, function(message) {
    
    console.log(msg);
    Timedelay(3000, function(message) {
      
      console.log(msg);
  })
  })
})

코드 설명

  1. 우리는 값이 1000인 콜백으로 Timedelay를 호출합니다.
  2. 다음으로 값이 2000인 Timedelay 함수를 다시 호출하려고 합니다.
  3. 마지막으로 값이 3000인 Timedelay 함수를 다시 호출하려고 합니다.

위 코드에서 함수 호출을 여러 번 시작하려고 하므로 코드가 더 복잡해지는 것을 볼 수 있습니다.

단계 3) 이제 동일한 코드를 사용하여 구현하는 방법을 살펴보겠습니다. generator에스. 아래 코드에서 이제 다음을 사용하여 Timedelay 함수를 구현하는 것이 얼마나 간단해졌는지 확인할 수 있습니다. generators.

콜백과 콜백 Generators

function* Messages() {
  console,log(yield(Timedelay(1000, function(){})));
  console,log(yield(Timedelay(2000, function(){})));
  console,log(yield(Timedelay(3000, function(){})));
}

코드 설명

  1. 우리는 먼저 generator Timedelay 함수를 호출하는 데 사용되는 함수입니다.
  2. 매개변수 값으로 1000을 사용하여 Timedelay 함수와 함께 Yield 함수를 호출합니다.
  3. 그런 다음 매개변수 값으로 2000을 사용하여 Timedelay 함수와 함께 Yield 함수를 호출합니다.
  4. 마지막으로 매개변수 값이 3000인 Timedelay 함수와 함께 Yield 함수를 호출합니다.

요약

Generators는 중첩된 콜백 문제를 완화하고 콜백 지옥이라고 알려진 문제를 제거하는 데도 사용할 수 있습니다. Generators are used to halt the processing of a function. This is accomplished by usage of the ‘yield’ method in the asynchronous function.