使用node.js对REST调用的响应不正确

时间:2013-08-01 09:27:11

标签: node.js rest asynchronous

我有以下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 个答案:

答案 0 :(得分:0)

首先,使用forEachmap代替IIFE的for循环。

其次,HTTP请求只有一个响应。您无法在res.send点击几次后发送多个请求。如果您需要所有信息,只需汇总JSON.stringify(elementArray, null, 2)的结果,然后使用res.send发送最终的汇总数据。