Node.js 약속 튜토리얼

이전 튜토리얼에서 비동기 이벤트에 사용되는 콜백 함수를 보았을 것입니다. 하지만 때때로 콜백 함수는 중첩되기 시작하고 프로그램이 길고 복잡해지기 시작하면 악몽이 될 수 있습니다.

약속이란 무엇입니까?

Promise로 시작하기 전에 먼저 Node.js의 "콜백" 함수가 무엇인지 다시 살펴보겠습니다. 우리는 이전 장에서 이러한 콜백 함수를 많이 보았으므로 그 중 하나를 빠르게 살펴보겠습니다.

아래 예는 연결하는 데 사용되는 코드 조각을 보여줍니다. MongoDB 데이터베이스를 검색하여 데이터베이스의 레코드 중 하나에 대한 업데이트 작업을 수행합니다.

Node.js 약속

  1. 위 코드에서 function(err,db) 부분은 익명 또는 콜백 함수의 선언으로 알려져 있습니다. MongoClient가 MongoDB 데이터베이스에서 연결 작업이 완료되면 콜백 함수로 돌아갑니다. 따라서 어떤 의미에서 연결 작업은 백그라운드에서 발생하고 완료되면 콜백 함수를 호출합니다. 이것이 Node.js의 핵심 중 하나이며 여러 작업이 동시에 발생하여 사용자가 작업을 수행하는 것을 차단하지 않도록 하는 것입니다.
  2. 두 번째 코드 블록은 콜백 함수가 실제로 호출될 때 실행되는 것입니다. 콜백 함수는 우리의 레코드 하나만 업데이트합니다. MongoDB 데이터 베이스.

그렇다면 약속은 무엇입니까? 음, Promise는 Node.js의 콜백 함수를 향상시킨 것일 뿐입니다. 개발 수명 주기 동안 여러 콜백 함수를 함께 중첩해야 하는 경우가 있을 수 있습니다. 이는 특정 시점에 지저분해지고 유지 관리가 어려울 수 있습니다. 간단히 말해서, Promise는 이러한 문제를 완화하기 위한 콜백의 향상된 기능입니다.

Promise의 기본 구문은 아래와 같습니다.

var promise = doSomethingAync()
promise.then(onFulfilled, onRejected)
  • "doSomethingAync"는 어떤 종류의 처리를 수행하는 콜백이나 비동기 함수입니다.
  • 이번에는 콜백을 정의할 때 '프라미스(promise)'라는 값이 반환되는데요.
  • 약속이 반환되면 2개의 출력을 가질 수 있습니다. 이는 'then 절'로 정의됩니다. 작업은 'onFulfilled' 매개변수로 표시되는 성공일 수 있습니다. 또는 'onRejected' 매개변수로 표시되는 오류가 있을 수 있습니다.

참고 : 따라서 Promise의 핵심 측면은 반환 값입니다. Node.js에서 일반 콜백을 사용할 때는 반환 값이라는 개념이 없습니다. 반환 값으로 인해 콜백 함수를 정의하는 방법을 더 많이 제어할 수 있습니다.

다음 주제에서는 Promise의 예와 콜백의 이점을 살펴보겠습니다.

약속에 대한 콜백

이제 Node.js 애플리케이션 내에서 "프라미스"를 사용하는 방법의 예를 살펴보겠습니다. Node.js 애플리케이션에서 Promise를 사용하려면 먼저 'promise' 모듈을 다운로드하여 설치해야 합니다.

그런 다음 아래와 같이 코드를 수정하여 약속을 사용하여 'Employee' 컬렉션의 Employeename을 업데이트합니다.

단계 1) NPM 모듈 설치

Node JS 애플리케이션 내에서 약속을 사용하려면 약속 모듈이 필요합니다. Promise 모듈을 설치하려면 아래 명령을 실행하십시오.

npm 설치 약속

단계 2) 약속을 포함하도록 코드를 수정하세요.

Promise에 대한 콜백

var Promise = require('promise');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url)
    .then(function(err, db) {
        db.collection('Employee').updateOne({
            "EmployeeName": "Martin"
        }, {
            $set: {
                "EmployeeName": "Mohan"
            }
        });
    }); 

코드 설명:-

  1. 첫 번째 부분은 코드에서 promise 기능을 사용할 수 있게 해주는 'promise' 모듈을 포함하는 것입니다.
  2. 이제 MongoClient.connect 함수에 'then' 함수를 추가할 수 있습니다. 따라서 이것이 수행하는 작업은 데이터베이스에 대한 연결이 설정되면 이후에 정의된 코드 조각을 실행해야 한다는 것입니다.
  3. 마지막으로 이름이 "Martin"인 직원의 EmployeeName을 "Mohan"으로 업데이트하는 작업을 수행하는 코드 조각을 정의합니다.

참고 : -

지금 내용을 확인해보면 MongoDB 데이터베이스에서 EmployeeName이 "Martin"인 레코드가 있으면 "Mohan"으로 업데이트된다는 것을 알 수 있습니다.

데이터가 데이터베이스에 제대로 삽입되었는지 확인하려면 다음 명령을 실행해야 합니다. MongoDB

  1. EmployeeDB 사용
  2. db.Employee.find({EmployeeName :모한 })

첫 번째 문은 EmployeeDb 데이터베이스에 연결되어 있는지 확인합니다. 두 번째 문은 직원 이름이 "Mohan"인 레코드를 검색합니다.

중첩된 약속 다루기

Promise를 정의할 때 "then" 메서드 자체가 Promise를 반환한다는 점에 유의해야 합니다. 따라서 어떤 의미에서 약속은 서로 중첩되거나 연결될 수 있습니다.

아래 예에서는 연결을 사용하여 2개의 콜백 함수를 정의합니다. 두 함수 모두 레코드를 MongoDB 데이터 베이스.

(주의 사항: 체인화(Chaining)는 메소드 실행을 서로 연결하는 데 사용되는 개념입니다. 애플리케이션에 'methodA'와 'methodB'라는 2개의 메소드가 있다고 가정해 보겠습니다. 그리고 논리는 'methodA' 다음에 'methodB'를 호출해야 하며, 'methodA' 다음에 'methodB'가 직접 호출되는 방식으로 실행을 연결하는 것입니다.)

이 예제에서 주목해야 할 중요한 점은 중첩된 프로미스를 사용하면 코드가 더 깔끔하고, 읽기 쉽고, 유지 관리하기 쉬워진다는 것입니다.

중첩된 약속 다루기

var Promise = require('promise');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url)

.then(function(db) {
    db.collection('Employee').insertOne({
        Employeeid: 4,
        EmployeeName: "NewEmployee"
    })

    .then(function(db1) {
        db1.collection('Employee').insertOne({
            Employeeid: 5,
            EmployeeName: "NewEmployee1"
        })
    })
});

코드 설명:-

  1. 이제 차례로 실행되는 2개의 "then" 절을 정의하고 있습니다. 첫 번째 then 절에서는 데이터베이스 연결이 포함된 'db' 매개변수를 전달합니다. 그런 다음 'Employee' 컬렉션에 레코드를 삽입하기 위해 'db' 연결의 컬렉션 속성을 사용합니다. 'insertOne' 메소드는 Employee 컬렉션에 실제 문서를 삽입하는 데 사용됩니다.
  2. 그런 다음 2를 사용하고 있습니다.nd then 절을 사용하여 데이터베이스에 다른 레코드를 삽입할 수도 있습니다.

지금 내용을 확인해보면 MongoDB 데이터베이스에 삽입된 2개의 레코드를 찾을 수 있습니다. MongoDB 데이터 베이스.

맞춤 약속 만들기

사용자 정의 Promise는 'q'라는 노드 모듈을 사용하여 생성할 수 있습니다. 노드 패키지 관리자를 사용하여 'q' 라이브러리를 다운로드하고 설치해야 합니다. 'q' 라이브러리를 사용한 후 "denodeify" 메서드를 호출하면 모든 함수가 약속을 반환하는 함수가 됩니다.

아래 예에서 우리는 숫자 2개를 더하는 "Add"라는 간단한 함수를 만들 것입니다. 우리는 이 함수를 promise를 반환하는 함수로 변환할 것입니다.

완료되면 Add 함수에서 반환된 Promise를 사용하여 console.log에 메시지를 표시합니다.

Promise를 반환하는 사용자 정의 함수를 생성하려면 아래 단계를 따르세요.

단계 1) NPM 모듈 설치

Node JS 애플리케이션 내에서 'q'를 사용하려면 'q' 모듈이 필요합니다. 'q' 모듈을 설치하려면 아래 명령을 실행하세요.

npm 설치 q

단계 2) 사용자 지정 약속을 만드는 데 사용될 다음 코드를 정의합니다.

맞춤형 약속 만들기

코드 설명:-

  1. 첫 번째 비트는 require 키워드를 사용하여 'q' 라이브러리를 포함하는 것입니다. 이 라이브러리를 사용하면 콜백을 반환하는 모든 함수를 정의할 수 있습니다.
  2. 우리는 변수 a와 b에 정의된 두 숫자를 더하는 Add라는 함수를 만들고 있습니다. 이 값들의 합은 변수 c에 저장됩니다.
  3. 그런 다음 q 라이브러리를 사용하여 Add 함수를 denodeify(모든 함수를 promise를 반환하는 함수로 변환하는 데 사용되는 메서드)하거나 그렇지 않으면 Add 함수를 promise를 반환하는 함수로 변환합니다.
  4. 이제 "Add" 함수를 호출하고 Add 함수를 탈노드화하기 위해 수행한 이전 단계로 인해 반환 약속 값을 얻을 수 있습니다.
  5. 'then' 키워드는 함수가 성공적으로 실행되면 console.log에 "추가 기능 완료"라는 문자열을 표시하도록 지정하는 데 사용됩니다.

위 코드를 실행하면 아래와 같이 console.log에 "추가 함수 완료"라는 출력이 표시됩니다.

맞춤형 약속 만들기

요약

  • Node.js에서 콜백 함수를 사용하면 단점이 있습니다. 때로는 개발 과정에서 콜백 함수의 중첩된 사용으로 인해 코드가 더 복잡해지고 유지 관리가 어려워질 수 있습니다.
  • 중첩된 콜백 함수와 관련된 대부분의 문제는 약속과 생성기를 사용하면 완화할 수 있습니다. node.js
  • Promise는 비동기 함수가 수행한 처리가 완료되었음을 나타내기 위해 비동기 함수에서 반환하는 값입니다.
  • 비동기 함수가 다른 비동기 함수 이후에 호출되어야 할 때 코드가 더 보기 좋고 유지 관리하기 쉽도록 하기 위해 약속을 서로 중첩할 수 있습니다.