class 中异步函数定义的语法错误
Syntax error with async function definition inside a class
我有一个 class 有几个我需要异步的函数,但是在函数名前面添加 async 会在编译时出错。 (仅使用一个功能 atm 进行测试)
class cataAPIService {
async getRouteDetails(route) {
var busID;
for(var i = 0; i < catabusRoutes.BUS_ROUTE_ID.buses.length; i++) {
if(catabusRoutes.BUS_ROUTE_ID.buses[i].name === route) {
busID = catabusRoutes.BUS_ROUTE_ID.buses[i].id;
console.log("Got bus id: " + busID);
}
}
var deferred = Promise.defer();
try {
const data = await axios.get("https://realtime.catabus.com/InfoPoint/rest/RouteDetails/Get/" + route);
console.log(data)
deferred.resolve(data)
} catch (error) {
console.log("Error in API call")
deferred.reject(error)
}
return deferred.promise
}
删除异步它很好,但我失去了我需要的功能。我是否犯了一个愚蠢的错误并错过了它?谢谢
控制台错误图片:
这是正确的语法。从 Node 8 开始完全支持异步函数。语法错误只会在使用旧版本的 Node 时发生。如果可能,节点应该更新到更新的版本。
该代码使用 deferred antipattern 并且不需要 async
函数。可能是:
async getRouteDetails(route) {
var busID;
for(var i = 0; i < catabusRoutes.BUS_ROUTE_ID.buses.length; i++) {
if(catabusRoutes.BUS_ROUTE_ID.buses[i].name === route) {
busID = catabusRoutes.BUS_ROUTE_ID.buses[i].id;
console.log("Got bus id: " + busID);
}
}
return axios.get("https://realtime.catabus.com/InfoPoint/rest/RouteDetails/Get/" + route)
.then(data => {
console.log(data);
return data;
})
.catch(error => {
console.log("Error in API call");
throw error;
});
}
函数默认部署到节点 6(您可以在控制台输出中看到)。节点 6 不支持 async/await 语法。如果你想使用 async/await,你必须 deploy to node 8(测试版),或者使用某种转译语言,如 TypeScript。
检查您的 Node.js 版本。
低于 7.6 版的 Node 版本不支持异步函数。
如果您使用的是旧版本,则需要将代码(例如使用 Babel)转换为 Node 可以理解的 JS 版本。
我有一个 class 有几个我需要异步的函数,但是在函数名前面添加 async 会在编译时出错。 (仅使用一个功能 atm 进行测试)
class cataAPIService {
async getRouteDetails(route) {
var busID;
for(var i = 0; i < catabusRoutes.BUS_ROUTE_ID.buses.length; i++) {
if(catabusRoutes.BUS_ROUTE_ID.buses[i].name === route) {
busID = catabusRoutes.BUS_ROUTE_ID.buses[i].id;
console.log("Got bus id: " + busID);
}
}
var deferred = Promise.defer();
try {
const data = await axios.get("https://realtime.catabus.com/InfoPoint/rest/RouteDetails/Get/" + route);
console.log(data)
deferred.resolve(data)
} catch (error) {
console.log("Error in API call")
deferred.reject(error)
}
return deferred.promise
}
删除异步它很好,但我失去了我需要的功能。我是否犯了一个愚蠢的错误并错过了它?谢谢
控制台错误图片:
这是正确的语法。从 Node 8 开始完全支持异步函数。语法错误只会在使用旧版本的 Node 时发生。如果可能,节点应该更新到更新的版本。
该代码使用 deferred antipattern 并且不需要 async
函数。可能是:
async getRouteDetails(route) {
var busID;
for(var i = 0; i < catabusRoutes.BUS_ROUTE_ID.buses.length; i++) {
if(catabusRoutes.BUS_ROUTE_ID.buses[i].name === route) {
busID = catabusRoutes.BUS_ROUTE_ID.buses[i].id;
console.log("Got bus id: " + busID);
}
}
return axios.get("https://realtime.catabus.com/InfoPoint/rest/RouteDetails/Get/" + route)
.then(data => {
console.log(data);
return data;
})
.catch(error => {
console.log("Error in API call");
throw error;
});
}
函数默认部署到节点 6(您可以在控制台输出中看到)。节点 6 不支持 async/await 语法。如果你想使用 async/await,你必须 deploy to node 8(测试版),或者使用某种转译语言,如 TypeScript。
检查您的 Node.js 版本。
低于 7.6 版的 Node 版本不支持异步函数。
如果您使用的是旧版本,则需要将代码(例如使用 Babel)转换为 Node 可以理解的 JS 版本。