2015-05-30 26 views
0

我正在加载一个配置对象,然后在for..in循环中重新映射它的属性(它对.styles的值进行一些字符串连接,这只是一个字符串数组)。当我要求模块时,重新映射显然没有发生。我猜这是一些异步问题,但我不知道如何处理它。有什么建议么?等待处理完成后再导出Node.js模块?

// Init vars 
var buildConfig = require('./build-config.js'); 
var cssPath = buildConfig.paths.cssPath; 
var bundle = buildConfig.bundle; 

// Callbacks 
var setPathsGeneric = function(basePath, extName) { // Currying function 
    return function(val, index, self) { 
     return basePath + val + extName; 
    }; 
}; 
var setCSSPaths = setPathsGeneric(cssPath, '.css'); 

// Map key values to actual URL paths 
for (var key in bundle) { 
    if(bundle[key].styles && bundle[key].styles.length) { 
     bundle[key].styles.map(setCSSPaths); 
    } 
} 

module.exports = { 
    bundle: bundle 
}; 

回答

2

当我需要的模块,重新映射显然并没有发生。 我猜这是某种异步问题,但我不知道如何处理它。

你的代码是100个%同步,所以节点执行所有的“重映射”代码 同步输出bundle对象之前。

我认为,你的问题是,Array.prototype.map()不会修改数组,而是返回新的数组。所以,你应该自己给bundle[key].styles分配新的值:

bundle[key].styles = bundle[key].styles.map(setCSSPaths); 
+0

你真的很棒!愚蠢的错误(不会是第一个或最后一个哈哈)。 –