nodejs에서는 async 키워드를 사용하여 함수를 호출할 수 있으며, 비동기 함수가 값을 반환하면 함수에서 오류가 발생하면 Promise가 구현됩니다. 약속은 거부될 것입니다.
이 튜토리얼의 운영 환경: windows10 시스템, nodejs 버전 12.19.0, DELL G3 컴퓨터.
nodejs에서 async의 사용법은 무엇입니까
1 async 함수란 무엇입니까
async 함수를 사용하면 동기 코드처럼 Promise 기반의 비동기 코드를 작성할 수 있습니다. async 키워드를 사용하여 함수를 정의하면 함수 내에서 wait 키워드를 사용할 수 있습니다. 비동기 함수가 호출되면 Promise가 반환됩니다. 비동기 함수가 값을 반환하면 Promise가 이행되고, 함수에 오류가 발생하면 Promise가 거부됩니다.
await 키워드는 Promise가 해결되기를 기다리고 실현된 값을 반환하는 데 사용할 수 있습니다. Wait에 전달된 값이 Promise가 아닌 경우 해당 값을 해결된 Promise로 변환합니다.
const rp = require('request-promise') async function main () { const result = await rp('https://google.com') const twenty = await 20 // 睡个1秒钟 await new Promise (resolve => { setTimeout(resolve, 1000) }) return result } main() .then(console.log) .catch(console.error)
2 비동기 함수로 마이그레이션
Node.js 애플리케이션이 이미 Promise를 사용하고 있는 경우 Promise를 기다리기 위해 원래 체인 호출만 다시 작성하면 됩니다.
애플리케이션이 여전히 콜백 기능을 사용하고 있다면 점진적으로 비동기 기능을 사용하도록 전환해야 합니다. 몇 가지 새로운 기능을 개발할 때 이 새로운 기술을 사용할 수 있습니다. 이전 코드를 호출해야 하는 경우 해당 코드를 Promise로 래핑하고 새로운 방식으로 호출하면 됩니다.
이를 수행하려면 내장된 util.promisify 메서드를 사용할 수 있습니다.
const util = require('util') const {readFile} = require('fs') const readFileAsync = util.promisify(readFile) async function main () { const result = await readFileAsync('.gitignore') return result } main() .then(console.log) .catch(console.error)
3 비동기 기능에 대한 모범 사례
3.1 Express에서 비동기 기능 사용
express는 원래 Promise를 지원하므로 Express에서는 비동기 기능을 사용하는 것이 상대적으로 간단합니다:
const express = require('express') const app = express() app.get('/', async (request, response) => { // 在这里等待 Promise // 如果你只是在等待一个单独的 Promise,你其实可以直接将将它作为返回值返回,不需要使用 await 去等待。 const result = await getContent() response.send(result) }) app.listen(process.env.PORT)
하지만 Keith Smith가 지적했듯이 위의 예에는 심각한 문제가 있습니다. 여기서는 오류 처리가 없기 때문에 Promise가 결국 거부되면 Express Route Processor가 일시 중지됩니다.
이 문제를 해결하려면 오류를 처리하는 함수로 비동기 처리기를 래핑해야 합니다.
const awaitHandlerFactory = (middleware) => { return async (req, res, next) => { try { await middleware(req, res, next) } catch (err) { next(err) } } } // 然后这样使用: app.get('/', awaitHandlerFactory(async (request, response) => { const result = await getContent() response.send(result) }))
3.2 병렬 실행
예를 들어, 이와 같은 프로그램을 작성하는 경우 한 작업에 두 개의 입력이 필요합니다. 데이터베이스에서 가져오고 다른 하나는 외부 서비스에서 가져옵니다.
async function main () { const user = await Users.fetch(userId) const product = await Products.fetch(productId) await makePurchase(user, product) }
이 예에서는 어떻게 되나요?
귀하의 코드가 먼저 사용자에게 전달되고,
그런 다음 제품을 받고,
마지막으로 결제가 이루어집니다.
보시다시피 처음 두 단계 사이에는 상호 의존성이 없으므로 실제로는 병렬로 실행할 수 있습니다. 여기에서는 Promise.all 메서드를 사용해야 합니다.
async function main () { const [user, product] = await Promise.all([ Users.fetch(userId), Products.fetch(productId) ]) await makePurchase(user, product) }
때로는 가장 빠르게 해결된 Promise의 반환 값만 필요할 수도 있습니다. 이 경우 Promise.race 메서드를 사용할 수 있습니다.
3.3 오류 처리
다음 예를 고려하세요.
async function main () { await new Promise((resolve, reject) => { reject(new Error('error')) }) } main() .then(console.log)
이 코드를 실행하면 다음과 유사한 메시지가 표시됩니다.
(node:69738) UnhandledPromiseRejectionWarning: Unhandled Promise RejectionWarning(거부 ID: 2) : 오류: error
(node:69738) [DEP0018] DeprecationWarning: 처리되지 않은 약속 거부는 더 이상 사용되지 않습니다. 앞으로는 처리되지 않은 약속 거부로 인해 0이 아닌 종료 코드로 Node.js 프로세스가 종료됩니다.
In 최신 Node .js 버전에서 Promise가 거부되고 처리되지 않으면 전체 Node.js 프로세스가 중단됩니다. 따라서 필요할 때 try-catch를 사용해야 합니다:
const util = require('util') async function main () { try { await new Promise((resolve, reject) => { reject(new Error('
노드 관련 지식을 더 보려면 nodejs tutorial을 방문하세요! !
위 내용은 nodejs에서 비동기의 사용법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

React'sstrongcommunityandecosystemoffernumerousbenefits : 1) impliceAccesstosolutionsThroughplatformslikestackOverflowandGitHub; 2) exealthoflibrariesandTools, walsuicomponentlibrarieslikeChakraui, thatenhancedevelopmenticificients; 3)

reftnativeIschosenFormoBiledevelopmentBecauseItAllowsDeveloperstowRiteCodeOndDeployIntonMultiplePlatforms, DevelopmentTimeAndCosts.itoffersnear-NativePerformance, AthrivingCommunity, AndleverAgesexistingWebDevelopmentsKills.keyTomasteringRea

RECT에서 usestate () 상태의 올바른 업데이트는 상태 관리의 세부 사항을 이해해야합니다. 1) 기능 업데이트를 사용하여 비동기 업데이트를 처리합니다. 2) 상태를 직접 수정하지 않도록 새 상태 객체 또는 배열을 만듭니다. 3) 단일 상태 객체를 사용하여 복잡한 양식을 관리하십시오. 4) 셰이크 방지 기술을 사용하여 성능을 최적화하십시오. 이러한 방법은 개발자가 일반적인 문제를 피하고보다 강력한 반응 응용 프로그램을 작성하는 데 도움이 될 수 있습니다.

React의 구성된 아키텍처는 모듈성, 재사용 성 및 유지 관리를 통해 확장 가능한 UI 개발 효율성을 만듭니다. 1) 모듈성을 사용하면 UI가 독립적으로 개발되고 테스트 될 수있는 구성 요소로 분해 될 수 있습니다. 2) 구성 요소 재사용성은 시간을 절약하고 다른 프로젝트에서 일관성을 유지합니다. 3) 유지 관리는 문제 포지셔닝 및 업데이트를 더 쉽게 만들어 지지만 구성 요소는 압도성과 깊은 둥지를 피해야합니다.

RECT에서 선언 프로그래밍은 UI의 원하는 상태를 설명하여 UI 논리를 단순화합니다. 1) UI 상태를 정의함으로써 RECT는 DOM 업데이트를 자동으로 처리합니다. 2)이 방법은 코드를 더 명확하고 유지 관리하기 쉽게 만듭니다. 3) 그러나 주 경영 복잡성과 최적화 된 재 렌더링에주의를 기울여야합니다.

Tonavigatereact'scomplexecosystemectically, worldsandlibraries, endegeirstrengthsandweaknesses, andintegrateTheMtoEnhancedEvelopment.StartWithCorereaCtConceptSandusestate, gragratevallystecorecomplexSolutionsormerObxasnee

ReactuseskeyStoefficificificificientifyListItemsByProvingableIdentityToeachelement.1) KeysLACKERACERACTTOTRACKCHANGENLISTSWITHOUTRE-RENDERINGENTIRELIST.2) 선택 ARRAYINDICES.3) 교정 keyUsagesSENTIFORYLATIONTIMPROFFERCANC

KeysinReactareCrucialforopiTizingProcess 및 ManingDynamicListSeffecticaly.tospotandfixkey-RelatedIssues : 1) addUniqueKeyStolistemStoavoidwarningsandperformanceIssues, 2) indainiqueIdentifiers, 3) 보장


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
