예를 들어 crypto.randomBytes(...)
과 함께 임의의 생성기를 작성하면서 다른 비동기 함수를 작성하고 있습니다. 콜백 지옥에있는 가을을 피하기 위하여, 나는 crypto.randomBytes
의 sync 기능을 사용할 수 있더라도. 내 코드가 실행될 때마다 노드 프로그램이 멈추는 지 의심 스럽습니다. 그런 다음 비동기 함수 목록이 있으면 실행 시간이 매우 짧으며 동기 함수로 작동 할 수 있다고 생각하고이 함수 목록으로 개발하는 것이 쉬울 것입니다.node.js에서 어떤 함수가 동기식으로 작동 할 수 있습니까?
1
A
답변
2
mz
모듈을 사용하면 crypto.randomBytes()
을 반환 할 수 있습니다. 이처럼 사용할 수 있습니다합니다 (--harmony
플래그를 사용하여 노드 7.x에서 사용 가능) await
사용 :
let crypto = require('mz/crypto');
async function x() {
let bytes = await crypto.randomBytes(4);
console.log(bytes);
}
x();
것은 위가 차단 것처럼 보이는 경우에도 블로킹입니다. 더 나은 데모
이 예를 고려해function timeout(time) {
return new Promise(res => setTimeout(res, time));
}
async function x() {
for (let i = 0; i < 10; i++) {
console.log('x', i);
await timeout(2000);
}
}
async function y() {
for (let i = 0; i < 10; i++) {
console.log('y', i);
await timeout(3000);
}
}
x();
y();
을 그리고 그 두 가지 기능을 실행하기 위해 많은 시간을 가지고 있지만, 그들은 서로를 차단하지 있습니다. 사용하여 노드 7.x의와
실행을 :
node --harmony script-name.js
또는와 노드 8.x의와
:node script-name.js
내가 그것을 비동기의 선택은하지의 것을 입증하는 당신에게 그 예를 보여 콜백 지옥과 좋은 코드와 동기화. 실제로는 async function
및 await
연산자를 ES2017으로 사용할 수있는 매우 우아한 방식으로 비동기 코드를 실행할 수 있습니다. 많은 사람들이 이러한 기능에 대해 알지 못하기 때문에 그것에 대해 읽는 것이 좋습니다.
0
비동기식이므로 다루는 법을 배웁니다.
Promises 지금은 앞으로, 그리고 ES2017의 await
과 async
은 훨씬 쉬워 질 것입니다.
Bluebirds 은 표준 Node.js 콜백 API를 처리 할 때 매우 유용합니다. 그것은 콜백을 요구하지 않고 약속을 되 돌리는 Async
태그가 붙은 함수를 추가합니다.
const Promise = require('bluebird')
const crypto = Promise.promisifyAll(require('crypto'))
function randomString() {
return crypto.randomBytesAsync(4).then(bytes => {
console.log('got bytes', bytes)
return bytes.toString('hex')
})
}
randomString()
.then(string => console.log('string is', string))
.catch(error => console.error(error))
관련 문제
- 1. Flex 이벤트를 동기식으로 처리 할 수 있습니까?
- 2. AudioObjectSetPropertyData를 동기식으로 호출 할 수 있습니까?
- 3. setTimeout을 동기식으로 사용할 수 있습니까?
- 4. 사용자 정의 함수가 libc의 함수 대신 작동 할 수 있습니까?
- 5. PapaParse "unparse"함수가 다양한 헤더에서 작동 할 수 있습니까?
- 6. 그레이비의 어떤 버전이 grails 버전에서 작동 할 수 있습니까?
- 7. Node.js에서 동시에 콜백을 처리 할 수 있습니까?
- 8. express node.js에서 setTimeout은 어떻게 할 수 있습니까?
- 9. node.js에서 Javascript 리디렉션을 수행 할 수 있습니까?
- 10. node.js에서 mongodb에 접근 할 수 있습니까?
- 11. 비동기 구성 요소를 동기식으로 만들 수 있습니까?
- 12. 어떻게 동기식으로 파일을로드 할 수 있습니까? (access-control-allow-origin)
- 13. 어떤 클래스에서 어떤 함수가 호출되었는지 어떻게 알 수 있습니까?
- 14. 함수가 약속을 반환 할 수 있습니까?
- 15. Yii. 렌더링은 renderPartial로도 작동 할 수 있습니까?
- 16. Windows 드라이버는 클라이언트없이 작동 할 수 있습니까?
- 17. urlclassloader와 system.load가 함께 작동 할 수 있습니까?
- 18. Node.js에서 요청 응답주기를 단위 테스트 할 수 있습니까? 예를 들어
- 19. 작동 할 CouchDB _list 함수가 없습니다.
- 20. RedirectToRouteResult가 RazorGenerator.Mvc와 함께 작동 할 수 있습니까?
- 21. javafuse가 정상적으로 작동 할 수 있습니까?
- 22. Node.js에서 신호를 보낼 수 있습니까?
- 23. 함수가 다르게 작동 할 때마다 다르게 동작합니다
- 24. 어떤 상황에서 할 수 있습니까?
- 25. Saxon은 .htaccess가있는 페이지에서 작동 할 수 있습니까?
- 26. node.js에서 https.get을 사용하여 쿼리를 전달할 수 있습니까?
- 27. crypto.pbkdf2는 비동기식입니다. 동기식으로 어떻게 처리합니까?
- 28. DynamoDB API 노드, 결과를 동기식으로 얻을 수 있습니까? 수,
- 29. EFCodeFirst는 기존 aspnetdb.mdf에서 작동 할 수 있습니까?
- 30. 파이썬 생성기가 사전처럼 작동 할 수 있습니까?
귀하의 질문에 대한 정확한 답변은 무엇입니까? – jfriend00