[REDIS] 자바 스크립트 디자인 패턴 - 원치 않는 비동기 다루기
REDIS자바 스크립트 디자인 패턴 - 원치 않는 비동기 다루기
나는 (Node.js를 사용) 이벤트 기반 프로그래밍에 아주 새로운 해요. 내가 다시하고 다시하고 다시에서 오는 유지하는 것이 특정 문제가 있기 때문에 난 그냥 그것에 대해 grokking 아니에요 뭔가, 거기에 있다고 생각합니다.
그것은 당신의 방식으로지고있는 것 같다 때 즉, 그 문제는 동시성에 대해 다루고 있습니다. 디자인 비 차단을하고 콜백 기반의 API를 촉진 타사 라이브러리로 작업 할 때 가장 자주, 내 경우에는, 자체 명단.
예를 들어 : 오른쪽 지금은 mranney의 많이 사용하게 몇 가지 물건 쓰고 있어요 라이브러리 노드를-레디 스. 내 프로그램은 RSS 피드를 긁어와 레디 스에 결과를 챙겨 먹여야한다. 나는 레디 스에 일반적인 전략 믿는 것을 사용하고 있습니다 :
var redis = require("redis"); var client = redis.createClient(); var get_latest_results = function (feedId) { client.get('feed:+ feedId + ':latest', function (err, res) { var latest_reading_key = res.toString(); client.hgetall(latest_reading_key, function (err, res) { var latest_reading = res; }); }); // how do I specify a return value for this function? }
latest_reading하는 것은 함수가 종료에 준비가 완료 될 때까지 정의되지 않기 때문에, 함수가 실패 get_latest_results의 하단에 latest_reading 수익을 배치. 반환 콜백을 의미하며, get_latest_results에 의해 무시되기 때문에 hgetall 호출 내에서 latest_reading 배치 복귀에 실패합니다.
이것은 내가 지속적으로 내 길을 작성하는 것 같다 상황의 종류의 한 예입니다. 어쩌면 내가 더 좋은 모르기 때문에 둥근 구멍에 스퀘어 페그 파운드 것을 시도하고있다. 문제의이 클래스를 해결하는 비 hackish 방법이있을 것을 보인다.
해결법
-
==============================
1.당신은 여전히 동기 패러다임에 함수를 작성하기 때문에 당신은 비동기로 어려움을 겪고있다.
당신은 여전히 동기 패러다임에 함수를 작성하기 때문에 당신은 비동기로 어려움을 겪고있다.
비동기에서는 이벤트에 콜백을 첨부해야한다. 당신은 get_latest_results ()와 같은 비동기 함수에서 결과를 기대하지해야하지만, 결과가 준비가되면 인수를 호출 할대로 콜백 함수를 전달해야합니다. 콜백은 결과와 함께 할 필요가 무엇이든 할 것입니다 :
var get_latest_results = function (feedId, readyCallback) { client.get('feed:' + feedId + ':latest', function (err, res) { var latest_reading_key = res.toString(); client.hgetall(latest_reading_key, function (err, res) { readyCallback(res); //--- Trigger Callback }); }); // how do I specify a return value for this function? //--- You don't }
그럼 당신은이 같은 함수를 호출 할 수 있습니다 :
get_latest_results(1000, function (result) { //--- Do whatever needs to be done with the latest result... });
from https://stackoverflow.com/questions/3919075/javascript-design-patterns-dealing-with-unwanted-asynchrony by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] jedis를 사용하여 레디 스에 연결할 수 없습니다 (0) | 2020.01.07 |
---|---|
[REDIS] 노드 애플 리케이션 사이에 공유 세션? (0) | 2020.01.07 |
[REDIS] 가게에 가장 좋은 방법은 키를 레디 스 (0) | 2020.01.07 |
[REDIS] 이 DBS와 하나의 인스턴스로 두 레디 스 인스턴스 결합 (0) | 2020.01.07 |
[REDIS] WebSocket을 통해 역사를 가진 실시간 pubsub 채팅 (0) | 2020.01.07 |