노드에서 Promissions와 async/await를 안전하게 사용하시겠습니까?js?
8618 단어 node
async
/await
을 사용합니다.대부분의 경우, 모든 것이 잘 돌아가지만, 때로는 사람을 곤혹스럽게 할 수도 있다. 특히 당신이 잘못을 처리해야 할 때이다.비동기 코드의 작성이 정확한지 어떻게 알 수 있습니까?하면, 만약, 만약...약속과
async
/await
은 노드 작성의 기본 부분이다.현대 JavaScript의 js 응용 프로그램을 사용합니다.응용 프로그램에서 그것들을 정확하게 사용할 수 있다면 좋겠다.네가 곤경에 빠졌을 때, 너의 틀이 이미 너를 덮었다는 것을 알면 좋지 않겠니?(야, 우리 다 있어!)만약 하나의 프레임워크가promises와
async
/await
에 대해'로컬 지원'이 있다면 상황은 매우 좋을 것이다. 그러나 이것은 실제로 무엇을 의미하는가?본문에서, 나는 당신에게 당신이 틀에서 무엇을 얻어야 하는지를 소개할 것입니다.그런 다음 네이티브 지원 프레임워크를 설명하고 Node에서 비동기식 코드를 안전하게 작성하는 방법을 알아봅니다.js.In this article I'm going to refer to promises and
async
/await
collectively as "async code".
점프 링크
How to write async code safely in Node.js
노드의 비동기 코드를 지원합니다.js
노드js는 v4.0.0(2015년 9월 발표) 이후 약속을 지지했고 v7.6.0(2017년 2월 발표) 이후
async
/await
을 지원했다.이러한 JavaScript 언어 기능은 현재 노드에서 널리 사용되고 있습니다.js 생태계.비동기 코드의 프레임워크인 '본체 지원' 은 어떤 모양입니까?
이러한 상황에서 '원본 지원' 은 프레임워크가 기본적으로 특정한 행위나 특성을 지원하고 추가 코드를 추가할 필요가 없다는 것을 의미한다.
다음은 노드에 필요한 물건이다.js 프레임워크는 이 컴퓨터에서 비동기 코드를 지원하여 안전하고 정확하게 실행해야 합니다.
async
/await
- 프레임에서 라우팅 프로세싱 함수의 약속을 명시적으로 해석하거나 거부할 수 있습니다(async
키워드를 사용하는 모든 JavaScript 함수는 automatically wrapped in a promise).throw
개의 오류를 얻을 수 있습니다. 이 오류는 프레임워크에 포착되어 우아하게 처리됩니다. 즉, 클라이언트에게 적당한 오류 응답을 보내고 오류를 기록합니다.response.send()
과 같은 현식 호출 방법이 필요하지 않다는 것을 의미합니다.하지만 이것은 좋은 선택이다.만약 프레임워크 본기가 비동기 코드를 지원하지 않는다면, 무슨 일이 일어날까요?
프로그램의 비동기적인 흐름 제어 행위는 예측할 수 없습니다. 특히 문제가 발생할 때, 예를 들어 포착하지 않은 약속 거부가 발생할 경우.틀에 약속 의식이 없기 때문에 약속을 거부하는 상황을 포착하지 않습니다.처리되지 않은 약속 거절이 발생하면 고객에게 영원히 회답을 보내지 않을 가능성이 높다.대부분의 경우, 이것은 고객의 요청을 중단시킬 수 있다.
다음은 노드에서 지원하는 스타일로 정의된 예제 파이프라인입니다.js 프레임워크:
app.get("/user/:user_id", async (request, response) => {
const user = await getUser(request.params.user_id);
response.json(user);
});
만약 위의 루트가 하나의 프레임워크에서 만들어진 서버의 실례에 의해 정의된 것이고, 이 프레임워크 본기가 비동기 코드를 지원하지 않는다면, 문제가 발생할 수 있습니다.route handler 함수는 어떤 오류 처리 코드도 실현하지 않습니다.getUser()
함수가 되돌아오는 약속이 거부되면 처리되지 않은 약속이 거부됩니다.처리되지 않은 약속 거부는 응용 프로그램의 메모리 유출을 초래할 수 있습니다.만약 메모리 유출이 심각하면
node
프로세스가 최종적으로 메모리를 소모하고 응용 프로그램은 요청을 처리할 수 없습니다.노드에서js v15.0.0 이후 처리되지 않은 약속이 버퍼링을 거부하여
node
프로세스를 종료합니다. 즉, 프로그램이 붕괴됩니다. (이전 버전에서는 stderr
에 경고 메시지를 보냅니다.)어느 노드?js 프레임워크 본체는 비동기 코드를 지원합니까?
다중 노드.js 프레임워크는 현재 비동기 코드를 지원하기 때문에 비동기 코드를 지원하지 않는 유행 프레임워크를 돋보이게 하는 것이 더 유용하다고 생각합니다.
Express - 이 컴퓨터는 비동기 코드를 지원하지 않습니다.Express가 발표된 지 거의 2년이 지났기 때문에 이 프레임워크는 단기간 내에 비동기 코드를 지원할 수 없습니다.현재 Express에서 벗어날 수 없는 경우에는 monkey patch in support,
async
/await
으로 전화하십시오.Restify- 아직 로컬 지원이 없습니다.merged mid-2020 지원, v9 릴리즈에서 출시 예정.
어떻게 노드에서 안전하게 비동기 코드를 작성합니까?js
원본이 지원하는 프레임워크로 새 프로젝트 구축
가능하다면 노드를 절대 사용해야 한다.js 프레임워크, 이 컴퓨터는 비동기 코드를 지원합니다.이것은 노드를 선택할 때 가장 낮은 요구 중의 하나일 것이다.새 프로젝트의 js 프레임워크
기존 애플리케이션을 기본 지원 프레임워크로 마이그레이션
기존 노드라면js 프로그램에서 사용하는 프레임워크는 비동기 코드를 지원하지 않습니다. 비동기 코드를 지원하는 프레임워크로 이전하는 것을 강력히 고려해야 합니다.
만약에 Express를 사용한다면 본고의'Which Node.js frameworks natively support async code?'부분에서 Express에서 이전하는 기교를 제공합니다.
처리되지 않은 약속이 노드 프로세스를 붕괴하는 것을 거부합니다!
이것은 정말 중요하다.
unhandledRejection
이벤트에 이벤트 처리 프로그램을 설정해서는 안 됩니다. 이 이벤트 처리 프로그램이 node
프로세스를 종료하지 않으면 안 됩니다.처리되지 않은 약속 거부가 발생했을 때 node
프로세스가 종료되지 않으면 프로그램에 메모리 유출 위험이 존재합니다.Node를 사용하기 시작할 때까지js>=v15.0.0이면 노드에서 make-promises-safe 모듈을 사용해야 합니다.js 응용 프로그램.프로그램에서 처리되지 않은 약속이 거부되었을 때, 이 모듈은 'Stacktrace를 인쇄하고 코드 1로 프로세스를 종료합니다.' (프로그램이 충돌하더라도.)
자세히 보기
이 주제에 대한 내용을 더 많이 읽고 싶으면 공식 학습 노드를 클릭하세요.js 사이트에는 리셋 경로를 포함하는 좋은 페이지가 있습니다➜ 언약➜ JavaScript의
async
/await
: Modern Asynchronous JavaScript with Async and Await.Node에서 약속을 올바르게 사용하는 방법에 대해 더 알고 싶으시면흔히 볼 수 있는 함정을 피하기 위해서, 나는 모두가 이곳에서 Broken Promises의 강연을 관람할 것을 건의합니다.
동시에 그다지 기술적이지 않은 문제에서...
책을 읽는 데 시간을 낭비하는 것에 싫증이 났다.js 블로그 글은 실제로 당신의 프로젝트를 개선하는 데 도움이 되지 않았습니까?
Sign up to my weekly-ish newsletter, 실제 개발자 문제를 해결하는 데 도움이 되는 새로운 블로그를 발표할 때 알려 드리겠습니다.✨
Reference
이 문제에 관하여(노드에서 Promissions와 async/await를 안전하게 사용하시겠습니까?js?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simonplend/are-you-using-promises-and-async-await-safely-in-node-js-1d27텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)