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 版本。