Javascript 模块导出中出现意外令牌
作为React应用程序一部分的文件出现以下错误:Javascript 模块导出中出现意外令牌,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,作为React应用程序一部分的文件出现以下错误: ./src/utils/api.js Syntax error: Unexpected token (118:1) 116 | } 117 | } > 118 | } | ^ 以下是有关文件的完整代码: import GtfsRealtimeBindings from 'mta-gtfs-realtime-bindings'; import rp from 'request-promise'
./src/utils/api.js
Syntax error: Unexpected token (118:1)
116 | }
117 | }
> 118 | }
| ^
以下是有关文件的完整代码:
import GtfsRealtimeBindings from 'mta-gtfs-realtime-bindings';
import rp from 'request-promise';
function getFeedData (sub) {
var feedId;
switch (sub) {
case '1': case '2': case '3': case '4': case '5': case '6': case 'S':
feedId = 1;
break;
case 'A': case 'C': case 'E':
feedId = 26;
break;
case 'N': case 'Q': case 'R': case 'W':
feedId = 16;
break;
case 'B': case 'D': case 'F': case 'M':
feedId = 21;
break;
case 'L':
feedId = 2;
break;
case 'G':
feedId = 31;
break;
}
rp({
method: 'GET',
url: 'http://datamine.mta.info/mta_esi.php?key=5db5e052519d17320f490738f2afe0d5&feed_id=' + feedId,
encoding: null
}).then((buf) => {
const feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(buf);
return { feed: feed };
});
function reverseStop (sub, stop) {
var stopIdN
var stopIdS
var stopData = require('./stops');
var invalidEntries = 0;
function filterByName (item) {
if (item.stop_name == stop && item.stop_id.charAt(0) == sub) {
return true;
}
invalidEntries++;
return false;
}
var stopObjs = stopData.filter(filterByName);
for (var i = 0; i < stopObjs.length; i++) {
if (stopObjs[i].stop_id.charAt(stopObjs[i].stop_id.length - 1) == 'N') {
stopIdN = stopObjs[i].stop_id;
} else if (stopObjs[i].stop_id.charAt(stopObjs[i].stop_id.length - 1) == 'S') {
stopIdS = stopObjs[i].stop_id;
}
}
return {
stopIdN: stopIdN,
stopIdS: stopIdS
};
}
module.exports = {
isDelayN: function (sub, stop) {
var arrivals = [];
var delays = [];
reverseStop(sub, stop);
getFeedData(sub);
(function () {
var invalidEntries = 0;
var feedObjs = getFeedData.feed.filter(function (feedObj) {
if (feedObj.entity.trip_update.stop_time_update.stop_id == reverseStop.stopIdN) {
return feedObj.entity.trip_update.stop_time_update;
}
});
for (var i = 0; i < feedObjs.length; i++) {
arrivals.push(feedObjs.arrival.time.low);
delays.push(feedObjs.arrival.delay);
}
})();
var nextArrival = Math.min(...arrivals);
var delayIndex = arrivals.findIndexOf(nextArrival);
var delay = delays.delayIndex;
if (delay === null || Math.ceil(delay / 60) <= 5) {
var noDelay = Math.ceil((nextArrival - getFeedData.feed.header.timestamp.low) / 60);
return { noDelay: noDelay };
} else {
var yesDelay = Math.ceil(delay / 60);
return { yesDelay: yesDelay };
}
},
isDelayS: function (sub, stop) {
var arrivals = [];
var delays = [];
reverseStop(stop);
getFeedData(sub)
.then(function (feed) {
var invalidEntries = 0;
var feedObjs = feed.filter(function (feedObj) {
if (feedObj.entity.trip_update.stop_time_update.stop_id == reverseStop.stopIdS) {
return feedObj.entity.trip_update.stop_time_update;
}
});
for (var i = 0; i < feedObjs; i++) {
arrivals.push(feedObjs.arrival.time.low);
delays.push(feedObjs.arrival.delay);
}
});
var nextArrival = Math.min(...arrivals);
var delayInex = arrivals.findIndexOf(nextArrival);
var delay = delays.delayIndex;
if (delay === null || Math.ceil(delay / 60) <= 5) {
var noDelay = Math.ceil((nextArrival - getFeedData.feed.header.timestamp.low) / 60);
return { noDelay: noDelay };
} else {
var yesDelay = Math.ceil(delay / 60);
return { yesDelay: yesDelay };
}
}
}
从“mta gtfs实时绑定”导入GtfsRealtimeBindings;
从“请求-承诺”导入rp;
函数getFeedData(sub){
var feedId;
开关(sub){
案例“1”:案例“2”:案例“3”:案例“4”:案例“5”:案例“6”:案例“S”:
feedId=1;
打破
案例“A”:案例“C”:案例“E”:
feedId=26;
打破
案例“N”:案例“Q”:案例“R”:案例“W”:
feedId=16;
打破
案例“B”:案例“D”:案例“F”:案例“M”:
feedId=21;
打破
案例“L”:
feedId=2;
打破
案例“G”:
feedId=31;
打破
}
反相({
方法:“GET”,
网址:'http://datamine.mta.info/mta_esi.php?key=5db5e052519d17320f490738f2afe0d5&feed_id=“+feedId,
编码:空
}).然后((buf)=>{
const feed=GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(buf);
返回{feed:feed};
});
功能反转停止(子,停止){
var stopIdN
变幅stopIdS
var stopData=require(“./stops”);
var无效标识=0;
函数filterByName(项){
if(item.stop\u name==stop&&item.stop\u id.charAt(0)==sub){
返回true;
}
无效标识++;
返回false;
}
var stopObjs=stopData.filter(filterByName);
对于(var i=0;i if(delay==null | | Math.ceil(delay/60)我在前面的一个函数中缺少了一个结束括号。让这成为我使用linter的一个教训。你有函数getFeedData
似乎没有结束括号,如果你在最后放一个括号,所有的东西都会在该函数中,模块。导出
不会被公开哇,我很尴尬我没听清楚。现在要结束这个问题。Linter或IDE;)@msanford不太好,这个问题应该删除,否则它只会作为一个印刷错误结束。Visual Studio代码是一个非常好的小编辑器,支持非常好,而不是IDE(我个人更喜欢WebStorm)但代码可以非常有效和快速地进行联机处理。@George啊,你说得对。投票通过了。@MSNFORD是对的,我在Visual Studio代码中发现了这个问题,我现在做的任何个人工作都可以使用它。