使用setInterval在变量上计算wihin函数

时间:2017-04-05 14:31:21

标签: javascript

我的java代码中有一个计算当前价格的方法,然后我在下面显示的javascript代码中使用它。

function updatePrice(id, currentPrice){

var newPrice = 0;
var cPrice = currentPrice;
cPrice = cPrice * 100;
if(rate == 1){
    newPrice = cPrice - 1;
}
if(rate == 2){

    newPrice = cPrice - 2;
}
if(rate == 3){

    newPrice = cPrice - 3;
}
document.getElementById(id).innerHTML = newPrice/100;;
return newPrice / 100;
}



var nPrice = updatePrice('reverse', currentPrice); //The new calculated price, currentPrice is the price first injected into the script 
var timeinterval = setInterval(function() { nPrice = updatePrice('reverse', nPrice); }, 60000); //the nPrice as currentPrice

我希望能够在运行setInterval时使用updatePrice中自己计算的newPrice,这样每分钟一次,newPrice被用来减少1,2或3(便士);

它可能非常简单,我还没注意到。

希望这是有道理的,如果需要,请随意填写请求更多信息。

1 个答案:

答案 0 :(得分:1)

您的初始问题是,您未将nPrice设置为等于updatePrice('reverse', nPrice)的返回值。因此,每次迭代都将使用nPrice的相同值并返回相同的结果。

您可以像这样修改代码以使其减少:

var nPrice = updatePrice('reverse', currentPrice);
var timeinterval = setInterval(function() { nPrice = updatePrice('reverse', nPrice); }, 60000);

但是,您可以更改更多内容以优化解决方案。



function updatePrice(id, currentPrice, rate){
    var newPrice = 0;
    var cPrice = Number(currentPrice) * 100;
    newPrice = ((cPrice - rate) / 100).toFixed(2);
    document.getElementById(id).innerText = newPrice;
    timeout = setTimeout(function () {
        updatePrice(id, newPrice, rate);
    }, 1000);
}

var rate = 1;
var currentPrice = 10;
var timeout = null;
// The new calculated price, currentPrice is the variable 
// first injected into the script from jsp
updatePrice('reverse', currentPrice, rate);

<div id="reverse"></div>
&#13;
&#13;
&#13;

由于您的费率与您想要减少的金额一致,因此无需使用if语句来处理rate的不同值。你可以简单地说cPrice - rate

您还可以使用递归的setTimeout而不是setInterval,这样您就不必更新或跟踪任何全局变量。