小编dan*_*bes的帖子

如何在Iron Router的onBeforeAction中等待http调用?

我想创建一个预加载脚本,执行许多异步函数来下载外部内容.我离这里很近,但我还没弄明白如何在我的onBeforeAction函数中推迟调用this.next().在下面的代码中,您可以看到我使用循环和setTimeout但是我以某种方式丢失了路由器的上下文,并且this.next()未定义.我相信这是因为我的preloadProject函数到了最后,路由器警告我,我忘了调用this.next(); 在我的waitToRender功能完成之前.

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) + …
Run Code Online (Sandbox Code Playgroud)

javascript meteor iron-router

11
推荐指数
1
解决办法
309
查看次数

标签 统计

iron-router ×1

javascript ×1

meteor ×1