У меня есть класс с несколькими функциями, которые должны быть асинхронными, но добавление 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.info("Got bus id: " + busID);
}
}
var deferred = Promise.defer();
try {
const data = await axios.get("https://realtime.catabus.com/InfoPoint/rest/RouteDetails/Get/" + route);
console.info(data)
deferred.resolve(data)
} catch (error) {
console.info("Error in API call")
deferred.reject(error)
}
return deferred.promise
}
Удаление асинхронного режима выполняется нормально, но я теряю нужную мне функциональность. Я делаю глупую ошибку и упускаю ее? Спасибо
Изображение ошибки консоли:





Это правильный синтаксис. Асинхронные функции полностью поддерживаются, начиная с Node 8. Синтаксическая ошибка возникает только при использовании более старой версии Node. По возможности, Node следует обновить до более новой версии.
Код использует отложенный антипаттерн и не требует функции 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.info("Got bus id: " + busID);
}
}
return axios.get("https://realtime.catabus.com/InfoPoint/rest/RouteDetails/Get/" + route)
.then(data => {
console.info(data);
return data;
})
.catch(error => {
console.info("Error in API call");
throw error;
});
}
По умолчанию функции развертываются на узле 6 (вы можете увидеть это в выводе консоли). узел 6 не поддерживает синтаксис async / await. Если вы хотите использовать async / await, вам нужно либо развернуть на узел 8 (в бета-версии), либо использовать какой-то транспилированный язык, такой как TypeScript.
Спасибо, я этого не знал. Сейчас я развертываюсь на узле 8
Проверьте свою версию Node.js.
Асинхронные функции не поддерживаются версиями Node старше 7.6.
Вам нужно будет перенести ваш код (например, с помощью Babel) в версию JS, которую Node понимает, если вы используете старую версию.
Довольно новичок в обещаниях и все еще пытаюсь понять его синтаксис, спасибо!