2017-02-16 2 views
0

Возможно ли использовать this.unblock() с перколятом: synced-cron? Я ожидаю, что PJ2_1, PJ2_2, PJ2_3 будут быстро распечатываться, а не ждать завершения Meteor.call() через 10 секунд, но это не так.Использование this.unblock() с метеорным перколятом: synced-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

Есть ли причина использовать вызов метода асинхронного вызова на сервере, а не просто использовать функцию напрямую? Вы можете сохранить этот СУХОЙ более простым способом. –

+0

Согласовано. Использование HTTP.get напрямую с обработкой обратного вызова. – cannin

ответ

1

this.unblock не работает так, как вы ожидаете, когда сервер вызова методов. Согласно источнику, unblock на сервере - нет-op. Это имеет смысл, потому что на сервере нет соединения (вы не выполняете вызов на основе DDP), поэтому разблокировать нечего.

Вместо вызова методов вызовите HTTP.get непосредственно с указанным обратным вызовом, и вы будете наблюдать за поведением, которое вы хотите.

В качестве альтернативы определите функцию, которая совместно используется вашим кодом метода и вызвана в вашем задании SyncedCron.

Смежные вопросы