我正在加载一个配置对象,然后在下面的for..in循环中重新映射它的属性(它对.styles的值进行一些字符串连接,这只是一个字符串数组)。当我需要模块时,重新映射显然没有发生。我猜这是某种异步问题,但我不知道如何处理它。有什么建议吗?
// 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
};
答案 0 :(得分:2)
当我需要模块时,显然没有发生重新映射。 我猜这是某种异步问题,但我不确定如何 处理它。
您的代码是100%同步的,因此节点会执行所有“重新映射”代码
在导出bundle
对象之前同步。
我认为,您的问题是Array.prototype.map()不修改数组,而是返回新数组。因此,您应该自己为bundle[key].styles
分配新值:
bundle[key].styles = bundle[key].styles.map(setCSSPaths);