2017-02-16 2 views
0

はそれがthis.unblockを()浸出液で使用することはできますか?私は、PJ2_1、PJ2_2、PJ2_3がすべてMeteor.call()が10秒で終了するのを待つのではなく、すばやく印刷することを期待していますが、そうではありません。流星浸出液とthis.unblock()を使用:同期-のcron:同期-cronの

例ジョブ:

SyncedCron.add({ 
    name: 'pj2', 
    schedule: function(parser) { 
    return parser.text('every 30 seconds'); 
    }, 
    job: function() { 
    console.log("PJ2_1:"); 

    Meteor.call('fa2', function(err, res) { 
     if (err) { 
     console.log("FA2: ERROR"); 
     } 
    }); 

    console.log("PJ2_2:"); 

    Meteor.call('fa2', function(err, res) { 
     if (err) { 
     console.log("FA2: ERROR"); 
     } 
    }); 

    console.log("PJ2_3:"); 
    } 
}); 

例Meteor.methods():

if (Meteor.isServer) { 
    Meteor.methods({ 
    'fa2': function() { 
     this.unblock(); 
     const data = HTTP.get('http://www.fakeresponse.com/api/?data={%22Hello%22:%22World%22}&meta=false&sleep=10'); 
     return data; 
    } 
    }) 
} 
+0

関数を直接使用するのではなく、サーバー上で非同期メソッド呼び出しを使用する理由はありますか?あなたはこのDRYを簡単な方法で保つことができます。 –

+0

合意。コールバックでHTTP.getを直接使用することができました。 – cannin

答えて

1

this.unblockサーバがメソッドを呼び出しているとき、あなたが期待するように動作しません。ソースによると、サーバー上のunblockはノーオペレーションです。サーバー上には接続がないため(DDPベースの呼び出しを実行していないため)、意味があります。そのため、se自体のブロックを解除するものはありません。

代わりにメソッドを呼び出すので、指定したコールバックを直接HTTP.getを呼び出し、あなたが望む行動を観察します。

あるいは、両方のあなたの方法のコードで共有し、あなたのSyncedCron仕事で呼び出される関数を定義します。

関連する問題