2017-06-13 27 views
0

我希望创建一个模块阵列到require,循环遍历需要的模块,require他们异步,然后回调。我曾尝试以下:NodeJS&Electron:异步多个所需文件

// async require module for other required modules 
function asyncRequire (requireList, callback) { 
    if (!Array.isArray(requireList)) {return}; 

    var index = -1; 
    var loop = {} 
    loop.next = function() { 
     if (index < requireList.length) { 
      var asyncOperation = function (j) { 
       setTimeout(function() { 
        index++; 
        var item = requireList[index]; 
        console.log(item); 
        window[item] = require(item); 
        loop.next(); 
       }, 10); 
      } 
      asyncOperation(requireList); 
     } else { 
      if (typeof callback === "function") { 
       setTimeout(function() { 
        callback(); 
       }, 1000); 
      } 
     } 
    } 
    loop.next(); 
} 

// usage example 
var requireList = ['moduleName', 'moduleName2'] 

asyncRequire(requireList, callback) 

function callback() { 
    console.log("success"); 
} 

然而,尽管pathrequire是正确的,我得到的错误:

AssertionError 
actual: undefined 
expected: true 
generatedMessage: false 
message: "missing path" 
name: "AssertionError" 
operator:"==" 
stack:"AssertionError: missing path↵ at Module.require (module.js:496:3)↵ at require (internal/module.js:20:19)↵ at asyncRequire.js:18:21" 
__proto__: Error 

我也觉得有可能是require完成之间的延迟,和callback。因此,callback可能会失败。它是否正确?

请注意,这是我的问题的延续:Where/How Should I require multiple modules for performance?

回答

0

至于我还记得你不能要求这样的(动态/运行时)模块,只有这样,我认为你可以做到这一点是通过手动阅读在运行时通过fs模块文件。 有关如何执行此操作的更多详细信息,请访问:Loading Node.js modules dynamically based on route