Mediteam.us (Steemit 기반) 사이트 개발 이야기 - Synchronize.js

in #kr7 years ago (edited)

https://mediteam.us
원문 : https://junn.in/archives/1038 (스팀에서는 코드가 잘 안실린다)

진행 단계는 다음과 같았다.

  1. Steem.js를 이용한 데이터 불러오기
  2. jQuery를 이용한 템플릿 삽입
  3. Node.js를 이용한 크롤링(Crawling)

이 중 Node.js로 작업했던 부분에 대해 기록해두면,
steem.js에서 제공되는 API는 주로 asynchornous 함수들이다. 즉,
steem.api.getDiscussionsByCreated(query, callback_function); 로 제공되며

아래와 같이 세줄의 코드가 있을 때 1,2,3 순서가 어떻게 출력될지 모르는 상황이 되어버린다.

steem.api.getDiscussionsByCreated(query, function(err, result) { console.log("1"); } );
steem.api.getDiscussionsByCreated(query, function(err, result) { console.log("2"); } );
steem.api.getDiscussionsByCreated(query, function(err, result) { console.log("3"); } );

크롤링을 진행하기 위해서는 각 함수들이 하나의 흐름으로 진행해야만 되는 상태기 때문에 이 함수들이 syncrhonously하게 진행되어야만 했다.

이 때 이용하는 라이브러리가 synchronize.js (http://alexeypetrushin.github.io/synchronize/docs/index.html) 이다.

var sync = require('synchronize');
steem.api.getContent = sync(steem.api.getContent);
steem.api.getAccounts = sync(steem.api.getAccounts);
steem.api.getDiscussionsByHot = sync(steem.api.getDiscussionsByHot);

사용할 함수를 다음과 같이 synchronous 함수로 등록시키고,

sync.fiber(function(){
var data = steem.api.getDiscussionsByCreated(query);
var data2 = steem.api.getDiscussionsByCreated(query2);
var data3 = steem.api.getDiscussionsByCreated(query3);
};

다음과 같이 실행할 경우 순서대로 하나씩 실행하게 된다.

mysql의 경우 Transaction 시작시 다음과 같이 실행하게 되는데,

Synchronize 를 사용할 경우 에러처리는 다음과 같이 할 수 있다.

Sort:  

thanks for the valuable information...!!
upvoted and followed...!!

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 64799.61
ETH 3102.94
USDT 1.00
SBD 3.83