node.js가 비동기 호출의 시작/완료 순서를 보증하는지 궁금합니다.node.js가 비동기 실행 순서를 유지합니까?
필자는 생각하지 않습니다. 그러나 비동기 호출이 예상대로 완료되지 않을 수 있기 때문에 인터넷에서 버그 샘플이 될 수있는 코드 샘플을 읽었습니다. 예제는 종종 다음 문맥에서 설명됩니다. 단일 스레드 비동기 모델 때문에 노드가 얼마나 좋은가? 그러나 나는이 일반적인 질문에 대한 직접적인 답을 찾을 수 없다.
다른 노드 모듈이 다른 보장을하는 상황입니까? 예를 들어, https://stackoverflow.com/a/8018371/1072626에서 레디 스는 주문을 보존하는 비동기 호출을 명확하게 표시합니다.
이 문제의 요점은 다음 실행 (또는 유사) 노드에서 엄격하게 안전합니다 삶은 수 있습니다? 사전에 기존 파일이있는 경우 이름 바꾸기가 Windows에서 실패 때문에 unlink
에 대한 호출이 필요하다 저자에 따르면
var fs = require("fs");
fs.unlink("/tmp/test.png");
fs.rename("/tmp/image1.png", "/tmp/test.png");
. 그러나 두 호출은 모두 비동기식이므로
rename
호출은
rename
비동기 입출력이 완료되기 전에
unlink
콜백에 있어야하며 그렇지 않으면
rename
이 먼저 실행되어 오류가 발생할 수 있습니다.
이름 바꾸기 전에 unlink가 실행되지만 이름 바꾸기가 unlink의 콜백에 없으면 unlink가 완료된 후에 rename이 실행되도록 보장되지 않습니다. –
Redis는 특별한 경우입니다. 한 번에 하나의 명령 만 실행하며 Node.js 드라이버는이 사실을 이용하도록 작성되었습니다. –
@BrandonTilley 감사합니다. 모듈간에 차이가 있으며 일반적으로 내 이해가 정확하다는 것을 분명히합니다. – vossad01