我有一个函数可以在循环中读入多个JSON文件。问题是,它们通过websocket每秒钟更新一次。所以经常出现这个错误(我猜测因为它试图在更新时读取文件):
QSPBTC rsi 48.09
BTSBTC rsi 40.36
undefined:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at checkPairs (C:\Users\user\Documents\bot\deletesoon.js:39:24)
at runCheckPairs (C:\Users\user\Documents\bot\deletesoon.js:81:5)
at Object.<anonymous> (C:\Users\user\Documents\bot\deletesoon.js:88:1)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
所以我尝试创建一个捕获此错误的函数,并允许函数再次启动(我也每隔5分钟调用一次该函数。)
function checkPairs(){
var RSI = require('technicalindicators').RSI;
const fs = require('fs');
var Twit = require('twit');
var config = require('./tconfig');
var T = new Twit(config);
var message = [];
var theLoop = ['ETHBTC','LTCBTC','BNBBTC','NEOBTC','BCCBTC','GASBTC'];
for(i = 0; i < theLoop.length; i++){
var symbol = theLoop[i];
var data = fs.readFileSync('charts/'+symbol+'.json');
var CurrentPair = JSON.parse(data);
var prices = [];
var period = 14;
var lowTotal = [];
var closeTotal = [];
var rsiArray = [];
for (var item in CurrentPair) {
prices.push(Number(CurrentPair[item].close));
}
var newRSI = [];
newRSI = RSI.calculate({period : period, values : prices});
var rsiResult = newRSI[newRSI.length -1];
console.log(symbol + " rsi " + rsiResult);
if(rsiResult <= 23 ){
var twitMessage = "RSI is LOW ("+rsiResult+") ";
var splitSymbol = "";
if(symbol.includes("BTC", 3) || symbol.includes("BTC", 4) ||
symbol.includes("BTC", 5) || symbol.includes("BTC", 6) ){
splitSymbol = symbol.replace("BTC", "");
};
T.post('statuses/update', { status: 'INDICATOR ALERT: '+ symbol + '
#'+splitSymbol +' : '+ twitMessage + ' \n \n #'+splitSymbol + ' #binance' +
' #dayTrading' + ' #TradingView'}, function(err, data, response) {
console.log(' TWEETED ' + symbol + " RSI " +
rsiResult);
})};
};
};
var runCheckPairs = function () {
setInterval(checkPairs, 300000);
checkPairs();
if(err){
console.log("error Handled")
runCheckPairs();
}
};
runCheckPairs();
console.log("\n\n");
任何帮助都会非常感谢