Я использую модуль node.js «async» и вам нужно использовать метод «map».
В основном у меня есть массив, содержащий другие массивы. Внутренние массивы содержат 2 элемента, тип и имя файла изображения.Невозможно использовать функцию «map» в асинхронном модуле
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) материал является вещь, которая не является правильным, но я не могу понять, как вернуть измененный элемент.
В карте (аранжировка, итератор, обратный вызов) документации, указано:
«Итератор вызывается с элементом из массива и обратного вызова для того, когда он закончил обработку»
Дело в том, что я не могу понять, как подать обратный вызов с новыми массивами.
спасибо, что работает отлично – Luc
Но это не так, что параметры передаются копией, они действительно передаются по ссылке. Код выше _will_ изменяет исходный массив (т. Е. 'Arr0 [0] === results [0]' в последнем обратном вызове). –
@ Linus Я думал === не был оператором сравнения сравнения, а сравнением без конвертации. Я не нашел ссылку на v8 и node.js об этом, но в mozilla doc я нашел это: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators – Nicocube