2015-01-11 1 views
1

많이 변하지 않는 일부 MySQL 테이블에 저장된 데이터를 캐시하고 싶습니다. 토론을위한 예제는 country_codes, language_codes 등이 될 수 있지만 추가 응용 프로그램 관련 데이터도 있습니다. 그것은 그 자체로 어렵지 않습니다.Sequelize 및 Node를 사용하여 정적 데이터를 지연로드하는 중

  1. 은 내가 사용할 것 "인라인"기능에 액세스 할 수있는 데이터를 원하는 : 내 생각이 어렵게 내가 노드의 세계에서 거의 모순 된 것 두 제약, Sequelize 및 Express를 가지고있다 JavaScript 표현식 및 명령문에서 광범위하게 사용됩니다. 예를 들어, 문자열을 Country.nameFromCode (code)와 같은 클래스 메서드와 연결할 수 있어야합니다. 아마도이 방법은 동기식이라는 의미입니다. 콜백과 약속은 겉으로보기에 단순한 요청/요구 사항에 대한 실질적인 해결 방법 인 것처럼 보입니다.

  2. 데이터로드가 지연됩니다. 시작시에 빈/www 스크립트 express-generator의 데이터를 쉽게 열망 할 수 있습니다. 그러나 여기서도 데이터를 합리적으로 적재하는 게 아니라고 생각합니다. 아마도 .nameFromCode 함수는 처음 액세스 할 때 데이터베이스에서 데이터를로드 한 다음 데이터를 캐시해야합니다.

그래서 : 나는 같은 deasync, sync, 또는 synchronize 처음으로 내가 .nameFromCode 호출을받을 모듈을 사용해야합니까? 해야합니까? 더 쉬운 대답이 있어야하는 것처럼 보입니다.

Sequelize 또는 mysql 드라이버에 동기식 .query 또는 .find 메소드가 있습니까? 그렇다면 아마도 더 나은 접근 방법 일 것입니다.

동기식을 포기해야합니까? :) 나는 비동기가 노드의 진언이라는 것을 알고 있지만 이런 상황에 돈을 지불하는 것은 부담 스럽다.

위에 링크 모듈뿐만 아니라, 여기에 관련된 것 같다 일부 참조는 다음과 같습니다

감사합니다.

답변

0

Sequelize 또는 mysql 드라이버에 동기식 .query 또는 .find 메소드가 있습니까?

불행히도, 나는 알고 있지 않습니다. 노드는 항상 비동기 I/O이며, 두 모듈 모두를 처리하는 fs 모듈은 예외입니다.

deassync와 같은 모듈을 사용하거나 동기화해야합니다. 처음으로 .nameFromCode 호출을 받아야합니까? 해야합니까? 더 쉬운 대답이 있어야하는 것처럼 보입니다.
[...]
동기식을 포기해야합니까? [...] 이런 상황에 돈을 지불하는 것은 부담스러운 가격 인 것 같습니다.

하나의 옵션은 async/await으로, 2016 년 1 월 현재 ECMAScript 사양의 3 단계 제안서를 사용하는 것입니다. 기본적으로
:

  • 약속이
  • 다른 사람 awaitasync 키워드로 표시해야 모든 기능에 따라 await 에드 될 수 있습니다 반환하는 모든 기능
  • async 기능을 암시 적으로 약속을 반환합니다

코드는 여전히 비동기식입니다. 그러나 그것은 거의 동기식 코드처럼 보일 것입니다. 굉장해!

당신이 뭔가를 구현할 수 :

async function claimThatYouAreInCountry (code) { 
    var country = await Country.nameFromCode(code); 
    console.log("I'm in " + country.name); 
} 

Babel playground의 또 다른 예 (출력/콘솔을 확인!)

나의 제안 Babel's require hook을 사용하는 것입니다, 그래서 모든 응용 프로그램과 투명 도착 빌드 단계가 필요하지 않습니다.

관련 문제