Ich möchte ein Preloading-Skript erstellen, das eine Reihe von asynchronen Funktionen zum Herunterladen externer Inhalte ausführt. Ich bin ziemlich nah hier, aber ich habe nicht wirklich herausgefunden, wie man diese.next() in meiner onBeforeAction-Funktion aufrufen. In dem Code unten sehen Sie, dass ich eine Schleife und setTimeout verwende, aber ich verliere irgendwie den Kontext meines Routers und this.next() ist undefiniert. Ich glaube, das liegt daran, dass meine preloadProject-Funktion zu Ende geht und der Router warnt, dass ich vergessen habe, dies zu nennen.next(); bevor meine waitToRender-Funktion beendet wird.Wie warten auf http Anrufe in Iron Routers onBeforeAction?
if (Meteor.isClient) {
IR_BeforeHooks = {
preloadProject: function() {
var itemsProcessed = 0;
_.each(items.items, function(e) {
HTTP.get(e.S3URL, {
headers: {
'Accept': '*/*'
},
responseType: 'arraybuffer' //requires aldeed:http
}, function(error, result) {
if (error) {
Session.set('error', {
'title': 'Could not download',
'message': error
});
}
if (result) {
itemsProcessed = itemsProcessed + 1;
}
}) //http get
}) //each
function waitToRender(router) {
console.log('waiting...')
var progress = (itemsProcessed/items.items.length) * 100;
if (progress < 100) {
$('.progress-bar').css('width', Math.floor(progress) + '%');
setTimeout((function() {
waitToRender(router);
}), 50);
//console.log('timeout for a few ms here')
}
else {
console.log('all done, render');
router.next(); // I get this is not a function error here
}
}
waitToRender(this);
}
}
}
und meinem Router
Router.before(
IR_BeforeHooks.preloadProject,
{
only:['editor', 'viewer', 'embedder']
}
);
Wegen komplizierten Anforderungen in meinem Projekt muss ich diese Aufgaben vor dem Rendern. Wie kann ich Iron Router auf meine http-Anrufe warten lassen, ohne den Browser zu blockieren?
Ich versuche ein ähnliches Problem zu lösen. Bitte helfen Sie mir mit diesem [link] (https://stackoverflow.com/questions/46072958/where-do-i-place-my-meteor-callpromise-code-so-it-works-with-my-waiton- Haken) Danke im Voraus. – SirBT