首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有可能创建一个require.js模块来决定何时完成加载?

是否有可能创建一个require.js模块来决定何时完成加载?
EN

Stack Overflow用户
提问于 2015-02-19 13:10:21
回答 1查看 139关注 0票数 3

在“正常”require.js函数模块中,模块函数一返回就被认为是“加载”的:

代码语言:javascript
代码运行次数:0
运行
复制
define(function() {
    // As soon as this function returns, the module is "loaded"
});

但我有一个模块需要做一些异步脚本加载(特别是包括一些s),我不希望我的模块被认为是“加载”,直到我说是。

在为require.js创建加载程序插件时,将为您提供一个"onload“函数,您可以在插件完成加载时调用该函数。这对我的情况来说是完美的,但我不希望我的Google包装器是一个插件,我希望它看起来是一个“正常”模块。优化器对插件的处理方式不同,我不想让人头痛。此外,插件必须使用特殊的语法,我想避免每次使用它时都要记住这一点。

我已经浏览了几次API接口,但没有找到完成我想要做的事情的方法。是否有一种定义模块的无文档(或文档不全)的方法,在这个方法中,模块本身可以决定什么时候它应该被视为“加载”?

例如,如果存在这样的实现,那么它将是非常棒的:

代码语言:javascript
代码运行次数:0
运行
复制
define(["onload"], function(onload) {
    setTimeout(onload, 5000);
});

当第一次需要这个模块时,“加载”应该需要5秒。

EN

回答 1

Stack Overflow用户

发布于 2015-02-19 13:25:29

我们使用下面的约定引导了很多东西,它基于平均堆栈的早期版本(0.3.x),并使用了可怕的异步库。

使用您的示例,它可能如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
// bootstrap.js

// Array of tasks to pass to async to execute.
var tasks = [];

// Require path
var thePath = __dirname + '/directoryContainingRequires';

// Build array of tasks to be executed in parallel.
fs.readdirSync(thePath).forEach(function (file) {
  if (~file.indexOf('.js')) {
    var filePath = thePath + '/' + file;

    tasks.push(function(callback) {
      require(filePath)(callback);
    });
  }
});

// Execute parallel methods.
async.parallel(
  tasks, 
  function(err) {
      if(err) console.error(err);
      console.log('All modules loaded!');
      process.exit(0);
  }
);

所需的文件看起来类似于以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
// yourModule.js
module.exports = function(moduleCallback) {
  setTimeout(function() {
     console.log('5 seconds elapsed');
     moduleCallback(null);
  }, 5000);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28607296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档