0

node.js の「async」モジュールを使用しており、「map」メソッドを使用する必要があります。
基本的に、他の配列を含む配列があります。内側の配列には、型と画像ファイル名の 2 つの要素が含まれます。

var arr0 = [];
var arr1 = ["type1", "image1.jpg"];
jsonArr.push(obj1);
var arr2 = ["type2", "image2.jpg"];
jsonArr.push(obj2);

内部配列ごとに、ファイル名で識別される画像の base64 エンコードを取得し、このエンコード文字列を配列の 3 番目の要素として追加します。

私はこのようなことをしています:

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) が正しくないことはわかっていますが、変更された要素を返す方法がわかりません。

map(arr, iterator, callback) ドキュメントでは、次のように指定されています。

「反復子は、配列からのアイテムと、処理が終了したときのコールバックで呼び出されます。」

問題は、コールバックに新しい配列を与える方法がわからないことです。

4

3 に答える 3

1

あなたはそれを適切にマッピングします。イテレータでコールバックを使用する必要があります。後のドキュメントを試してください

var fs = require("fs");
var after = require("after");

function getImageEncoding(tuple, callback){
    fs.readFile(arr[1], function(err, data){
        if (err) return callback(err)
        callback(null, tuple.concat(data.toString('base64'))
    });
}

after.map(arr0, getImageEncoding, function(err, results){
    console.log("in after.map: " + results + "\n");
});
于 2012-03-01T15:04:53.540 に答える
1

問題は、結果としての戻り値をarr.push使用してコールバックを実行することです。実際には結果として配列が必要です。concat代わりに使用してください:

callback(null, arr.concat(base64Image));
于 2012-03-01T15:14:02.653 に答える
1

これは機能しません。これは、callbackinが必要なafterではなく( is )の戻り値でgetImageEncoding呼び出されるためです。arr.push1arrarr.push

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
        arr.push(base64Image);
        callback(err, arr);
    });
}

async.map(arr0, getImageEncoding, function(err, results){
console.log("in async.map: " + results + "\n");
});
于 2012-03-01T15:01:44.050 に答える