我正在使用node.js「異步」模塊,並需要使用「地圖」方法。
基本上我有一個包含其他數組的數組。內部數組包含2個元素,一個類型和一個圖像文件名。不能在異步模塊中使用「地圖」功能
var arr0 = [];
var arr1 = ["type1", "image1.jpg"];
jsonArr.push(obj1);
var arr2 = ["type2", "image2.jpg"];
jsonArr.push(obj2);
對於每個內部陣列,我想獲得由文件名指定的圖像的base64編碼並添加此編碼字符串作爲數組的第三元件。
我在做這樣的事情:
var fs = require("fs");
var async = require("async");
function getImageEncoding(arr, callback){
console.log("getEncoding:" + arr + "\n");
// Get image filename
image = arr[1];
// Read file and get base64 encoding
fs.readFile(image, function(err, original_data){
var base64Image = original_data.toString('base64');
console.log("test:" + base64Image + "\n");
// Modify current arr by appendingthe base64 encoding of the image
callback(null, arr.push(base64Image));
});
}
async.map(arr0, getImageEncoding, function(err, results){
console.log("in async.map: " + results + "\n");
});
我知道arr.push(base64Image)的東西是不正確的東西,但我無法弄清楚如何返回修改後的元素。
在地圖(ARR,迭代器,回調)文檔中,規定:
「該迭代器被調用,從數組中的項,並且當它已經完成處理的回調」
事情是我無法弄清楚如何提供新的數組回調。
感謝,完美的作品 – Luc 2012-03-01 15:20:22
但是,他們確實通過引用傳遞這是不正確的參數是通過複製傳遞。上面的代碼修改原始數組(即最終回調中的'arr0 [0] === results [0]')。 – 2012-03-01 15:26:44
@Linus我以爲===不是參考比較運算符,而是沒有轉換的比較運算符。我沒有在v8和node.js上找到關於此的參考,但是在mozilla doc中我發現這個:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators – Nicocube 2012-03-01 15:51:39