gpt4 book ai didi

javascript - Xhr : API Cryptocurrency price alert script returns wrong and duplicate values

转载 作者:行者123 更新时间:2023-12-03 03:10:01 26 4
gpt4 key购买 nike

这是一个简单的普通 JS 脚本,连接到 CoinMarketCap.com ticker API .

它应该做什么:

1) 检索硬币数据,将其存储在对象中

2) 等待 x 时间(在本例中为三分钟)

3) 重复 1),检索更新的数据

4)比较最近的数据和以前的数据

5) 如果硬币的值(value)上涨,console.log警报

6)重复该过程

它的作用是什么:这两个对象( firstValuesecondValue )是重复的。另外,当重新开始时(再次调用 main() 函数),这两个对象的内容无法更新,并显示以前的值。

// Variables

// Set first recorded value
var firstValue;

// Set second value (most recent)
var secondValue;


// Get the obj from CoinMarketCap API
function getCoinValues() {
var requestURL ="https://api.coinmarketcap.com/v1/ticker/?limit=10";
var request = new XMLHttpRequest();
request.open("GET", requestURL);
request.send();

// When loaded assign to obj variable and return it
request.onload = function getUsdValues() {
// Save data to the 'obj' object
obj = JSON.parse(request.response);
console.log("Retrieved coin data");
};
return obj;
}


// Wait
function wait(ms){
console.log("Waiting.")
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}


// Compare two objects
function comparePrices (obj1, obj2) {
// Take price from one array, compare to the other
for (var i = 0; i < obj1.length; i++) {
// console.log(JSON.stringify(obj2[i].id) + " OLD:" + obj1[i].price_usd + "NEW:" + obj2[i].price_usd)
if (obj2[i].price_usd > obj1[i].price_usd) {
console.log(JSON.stringify(obj2[i].id) + " has increased!");
console.log("From $" + obj1[i].price_usd + " to $" + obj2[i].price_usd);

}
}

}


// Main function //

function main () {
// Get 1st coin values
console.log("Getting first values");
firstValue = getCoinValues();

// Wait
console.log("Waiting")
wait(30000);

// Retrieve new values
console.log("Getting second values")
secondValue = getCoinValues();

// Compare two sets of values
console.log("About to compare prices")
comparePrices(firstValue, secondValue);
console.log("Prices compared")

// Do it all again

// "Emptying" the variables
firstValue = null
secondValue = null

// Starting the main loop
main();

}

main();

为什么不firstValuesecondValue即使价格在股票行情中有效变化,也会显示不同的结果?

请原谅任何技术术语的不当使用以及整体编码新手。

最佳答案

OP 代码包含许多技术和逻辑错误。请参阅固定代码内的注释。

// Variables

// Set first recorded value
//var firstValue; //no use

// Set second value (most recent)
//var secondValue; //no use

//Save AJAX response here
var currentValue = [];
//define the const URL
var requestURL = "https://api.coinmarketcap.com/v1/ticker/?limit=10";

// Get the obj from CoinMarketCap API - wrong description
//Process request to API
function getCoinValues() {
//var requestURL = "https://api.coinmarketcap.com/v1/ticker/?limit=10";
var request = new XMLHttpRequest();
request.open("GET", requestURL);
//request.send();//dedine a handler first
request.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) { //**this** is request
var tmpObj = JSON.parse(this.responseText);
if (currentValue && tmpObj) {//compare when both arrays exist
comparePrices(currentValue, tmpObj);
}
if (tmpObj) //response received and parsed
currentValue = tmpObj;
//console.log(tmpObj);
}
}
//now it is good time to send request
request.send();

// When loaded assign to obj variable and return it
//request.onload = function getUsdValues() {
// // Save data to the 'obj' object
// obj = JSON.parse(request.response); //obj was never defined
// console.log("Retrieved coin data");
//};
//return obj; //never try to return anything from asynchronous function
}


// Wait
//Good to hang the system
/*
function wait(ms) {
console.log("Waiting.")
var start = new Date().getTime();
var end = start;
while (end < start + ms) {
end = new Date().getTime();
}
}
*/

// Compare two objects (arrays in fact)
function comparePrices(obj1, obj2) { //usage: comparePrices(current,new)
console.log(new Date().toLocaleTimeString());
// Take price from one array, compare to the other
for (var i = 0; i < obj1.length; i++) {
// console.log(JSON.stringify(obj2[i].id) + " OLD:" + obj1[i].price_usd + "NEW:" + obj2[i].price_usd)
if (obj2[i].price_usd > obj1[i].price_usd) {
//console.log(JSON.stringify(obj2[i].id) + " has increased!"); //no need to stringify.
console.log(obj2[i].id + " has increased! From $" + obj1[i].price_usd + " to $" + obj2[i].price_usd);
} else if (obj2[i].price_usd < obj1[i].price_usd) {
console.log(obj2[i].id + " has decreased! From $" + obj1[i].price_usd + " to $" + obj2[i].price_usd);
} else {
console.log(obj2[i].id + " No change $" + obj2[i].price_usd);
}
}
}

// Main function //

function main() {
getCoinValues();
setTimeout(main, 30000);//run again in 30 sec
return;
//All remaining code is wrong

//// Get 1st coin values
//console.log("Getting first values");
//firstValue = getCoinValues();

//// Wait
//console.log("Waiting")
//wait(30000);

//// Retrieve new values
//console.log("Getting second values")
//secondValue = getCoinValues();

//// Compare two sets of values
//console.log("About to compare prices")
//comparePrices(firstValue, secondValue);
//console.log("Prices compared")

//// Do it all again

//// "Emptying" the variables
//firstValue = null
//secondValue = null

//// Starting the main loop
//main();

}

main();

我本来想创建一个代码片段,但决定不这样做。

关于javascript - Xhr : API Cryptocurrency price alert script returns wrong and duplicate values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com