0

私は次のAPIを持っています:

for (var index in workload.elements) {
    (function(index) {
        var arr = [];
        var resourceIdentifiers = {};
        var elementinfo = {};
        var metadataModified = {};

        elementinfo = workload.elements[index];

        arr[index] = workload.elements[index].uri;

        if (workload.elements[index].parameters.imageUri) {
            arr.push(workload.elements[index].parameters.imageUri);
        }

        resourceIdentifiers = arr.join(',');

        console.log('uri' + resourceIdentifiers);

        mysql.elementlevelpricing(resourceIdentifiers, function(result) {

            elementlevelpricingSummary = result;

            metadataModified = workload.elements[index].metadata;

            metadataModified.pricingsummary = elementlevelpricingSummary;
            delete elementinfo.metadata;

            elementinfo.metadata = metadataModified;

            workloadinfo.elements = JSON.stringify(elementArray, null, 2);

            elementArray[index] = elementinfo;

            console.log(JSON.stringify(elementArray, null, 2));

            res.send(JSON.stringify(elementArray, null, 2));

        });

    })(index);
}

console.log は正しい結果を出力しますが、REST 呼び出しへの応答は正しくなく、値が 1 つだけループに入るという結果が得られます。

4

1 に答える 1

0

まず、IIFE で for ループの代わりにforEachまたはマップを使用します。

次に、HTTP 要求には 1 つの応答しかありません。res.send数回発射して複数のリクエストを送信することはできません。すべての情報が必要な場合は、 の結果を集計しJSON.stringify(elementArray, null, 2)、最終的な集計データを で送信しres.sendます。

于 2013-08-04T19:32:38.910 に答える