0

送信されたアイテムの価格を計算する Steam ボットを書いています。機能がうまく使えない。URLから価格を取得し、それを合計してconsole.logにしたい。

console.log はループの前に実行されるため、実行できません。

私はJavascriptが初めてで、修正できません:(

var whole_price = 0;
for(var i=0 ; i<offer.itemsToReceive.length; i++){
    getPrice(offer.itemsToReceive[i].market_hash_name, function(price){
        whole_price += price;
    }); 
}
console.log('Accepted offer from ' + offer.partner + ' with ' + offer.itemsToReceive.length + ' items valued as '+whole_price+'$.' );

URL の価格を取得する関数:

function getPrice(name, callback){
    name = name.replace(/\ +/g, '%20');
    var url = 'http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name='+name;
    var price = 0;


    request(url ,function(error, res, body){
        var useCSGOBACKPACK = false;
        if(!error && res.statusCode == 200){
            body = JSON.parse(body);
            if(body.success == true){
                price = body.median_price.substr(1);
            }else{
                useCSGOBACKPACK = true;
            }
        }else{
            useCSGOBACKPACK = true;
        }

        if(useCSGOBACKPACK==true){
            url = 'http://csgobackpack.net/api/GetItemPrice/?id='+name+'&currency=USD';
            request(url, function(error, res, body){
                body = JSON.parse(body);
                price = body.median_price;
            });
        }

        callback(price);
    });

}
4

2 に答える 2

3

このようなことをする最善の方法は...

var whole_price = 0;
var requestsMade = 0;
for(var i=0 ; i<offer.itemsToReceive.length; i++){
    requestsMade++;
    getPrice(offer.itemsToReceive[i].market_hash_name, function(price){
        whole_price += price;
        requestsMade++;

        if(requestsMade == offer.itemsToReceive.length-1)
        {
            console.log(YOUR MESSAGE);
        }
    }); 
}

これは基本的に、すべてのリクエストが作成されて応答されるまで、メッセージをログに記録しないようにすることです。これは、すべての呼び出しが特定の順序で行われたとしても、異なる順序で完了する可能性があるためです。

于 2016-01-17T21:07:42.673 に答える