Parse.com의 Cloud Code에서 delay 사용하기

Parse.com을 즐겨 사용하고 있습니다.

Cloud Code를 이용해서 Background Job을 구성했는데요.

Parse가 30 request / sec 가 제한인데 Background Job이 돌때 이게 아슬아슬 하더군요.

그래서 delay를 줄 방법을 찾아봤습니다.

  1. settimeout은 cloud code에서 지원하지 않아요. 탈락!

  2. NodeJS의 process.nextTick 이게 먹더군요. 이걸 보니 parse.com은 node로 구성된게 100% 군요.
    검색해보니 이미 선구자가 있군요.
    http://david.logdown.com/posts/255107/parse-cloud-code-does-not-support-settimeout
    이건 scope가 여러군데서 쓰기엔 적합하지 않아서, 간단하게 이렇게 구성했습니다.

    // delay using promise (setTimeout didn’t support)
    var delay = function(delayTime) {
    var delayUntil;
    var delayPromise;

     var _delay = function () {
         if (Date.now() >= delayUntil) {
             delayPromise.resolve();
             return;
         } else {
             process.nextTick(_delay);
         }
     }
    
     delayUntil = Date.now() + delayTime;
     delayPromise = new Parse.Promise();
     _delay();
     return delayPromise;
    

    };

유용합니다 : )
용례는 이렇게요.

delay(100).then( ... );

Parse.com 완전 좋아요. 꼭 쓰세요~

2 Likes

좋아요 좋아요~ 굿잡~^^

Parse.com에서는 이 코드가 유용하지만,
parse-server에서는 코드가 계속 실행되기 때문에 cpu 점유율을 끌어올리는 문제가 있습니다.

parse-server에서는 delay의 용도라면 setTimeout이 지원되기 때문에 그냥 setTimeout을 쓰시면 됩니다.

추가1) 이벤트 루프의 밀린 작업을 처리하기 위해서, setTimeout을 0로 쓰실때에는 process.nextTick이 성능이 낫다고 하네요.

1 Like