2017-02-16 55 views
0

是否可以使用this.unblock()和percolate:synced-cron?我希望PJ2_1,PJ2_2,PJ2_3能夠快速打印出來,而不是等待Meteor.call()在10秒內完成,但事實並非如此。使用this.unblock()和Meteor percolate: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是無操作的。這是有道理的,因爲在服務器上沒有連接(你沒有執行基於DDP的調用),所以沒有任何可以解除阻塞的東西。

而不是調用方法,直接調用HTTP.get指定的回調,你會看到你想要的行爲。

或者,定義一個函數,該函數由您的方法代碼共享並在您的SyncedCron作業中調用。