2015-05-30 27 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

你真的很棒!愚蠢的錯誤(不會是第一個或最後一個哈哈)。 –