如果错误node.js重新运行函数

时间:2018-03-28 20:16:14

标签: javascript node.js api

我有一个函数可以在循环中读入多个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");

任何帮助都会非常感谢

0 个答案:

没有答案