>웹 프론트엔드 >JS 튜토리얼 >더욱 깔끔한 비동기 JavaScript 코드를 위해 Promise를 중첩 해제하려면 어떻게 해야 합니까?

더욱 깔끔한 비동기 JavaScript 코드를 위해 Promise를 중첩 해제하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-09 22:40:10733검색

How Can I Unnest Promises for Cleaner Asynchronous JavaScript Code?

중첩된 구조를 제거하기 위한 Promise 연결

비동기 작업으로 작업할 때 Promise는 콜백을 처리하고 코드 가독성을 유지하는 편리한 방법을 제공합니다. 그러나 중첩된 Promise는 코드를 빠르게 복잡하고 따르기 어렵게 만들 수 있습니다. 이 문서에서는 중첩된 Promise를 제거하고 명확성을 높이기 위해 연결하는 방법에 대해 설명합니다.

접근 방식

중첩된 Promise를 제거하려면 각 then 콜백에서 새 Promise를 반환합니다. 이를 통해 Promise를 하나씩 연결하여 중첩된 구조가 필요하지 않게 됩니다. 다음은 제공된 코드의 수정된 버전입니다.

exports.viewFile = function(req, res) {
    var fileId = req.params.id;
    boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken)
      .then(function(response) {
          return boxViewerRequest('documents', {url: response.request.href}, 'POST');
      })
      .then(function(response) {
          return boxViewerRequest('sessions', {document_id: response.body.id}, 'POST');
      })
      .then(function(response) {
          console.log(response);
      });
};

이 코드에서 각 콜백은 후속 요청에 대한 약속을 반환하여 실행이 순차적으로 계속되도록 합니다.

일반 패턴

Promise를 연결하는 패턴은 다음과 같습니다. 다음:

somePromise.then(function(r1) {
    return nextPromise.then(function(r2) {
        return anyValue;
    });
}) // resolves with anyValue

     ||
    \||/
     \/

somePromise.then(function(r1) {
    return nextPromise;
}).then(function(r2) {
    return anyValue;
}) // resolves with anyValue as well

새 Promise를 반환할 때 해당 Promise의 결과 값이 체인의 다음 핸들러로 전달됩니다. 또는 핸들러가 반환한 Promise가 체인의 마지막 Promise인 경우 해당 Promise의 확인 값이 소비자에게 전달됩니다.

위 내용은 더욱 깔끔한 비동기 JavaScript 코드를 위해 Promise를 중첩 해제하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.