0

ノードjsファイルrestservice.jsとmysql.jsがあります

mysql.jsには、elementlevelpricingとpricingdetailの2つの関数があります

restservice.js には、次のコードを持つ API があります。

var ワークロード = req.body; var workloadinfo = {workloadId:workload.workloadId、ownerId:workload.ownerId、
uniqueName:workload.uniqueName、name:workload.name}

if(workload.elements &&workload.elements.length > 0) {

    var elementlevelpricingSummary = {};
    var elementArray = [];
    var elementinfo = {};
    var metadataModified = {};
    var pricingDetail = {};


    async.forEachSeries(workload.elements, createResponse, function (err) {
        res.send(workloadinfo); 
    });


    function createResponse(elements,callback) {

        var resourceIdentifierArray = [];

        elementinfo = elements;

        resourceIdentifierArray.push(elements.uri);


        var resourceIdentifiers = resourceIdentifierArray.join(',');


        // Get element level pricing summary
        mysql.elementlevelpricing(resourceIdentifiers, function(result){

                    // do some stuff here

        return callback();

    });
};
};

mysql.js で関数pricingdetail を呼び出し、その結果をグローバル変数workloadinfo に追加する必要があります (すでに elementlevelpricing の結果セットがあり、foreachSeries 内で送信されたものを確認できます)。これを達成するための専門的な方法を誰かに提案してもらえますか?

4

1 に答える 1

0

非同期関数を使用します。Node.js の要点は、ブロックを回避することです。Node.js でのブロックは、スレッド化された環境でのブロックよりも悪いものです。これは、他のスレッドが存在しないためです (ただし、他のクラスター化されたプロセスが存在する可能性があります)。利用可能な唯一のイベント ループをブロックしています。つまり、サーバー全体が待機する必要があり、I/O が完了するまで作業はまったく行われません。

于 2013-08-04T09:27:22.887 に答える