JS - Ошибка синтаксического анализа для асинхронной функции - PullRequest
0 голосов
/ 29 июня 2018

Я создал веб-приложение node.js. В настоящее время я использую MSSQL для БД. Я создал функции (sql.js), чтобы выполнять соответствующие функции SQL. Я также создал обработчики асинхронных функций (controllers.js), чтобы я мог использовать ключевые слова async и await в моем маршрутизаторе (экспресс). Маршрутизатор вызывает их с ключевым словом await. Я не получаю никаких ошибок при вызове этих функций, на самом деле все возвращает данные и работает нормально, но в моем текстовом редакторе (VSCode) я получаю следующую ошибку

[eslint] Parsing error: Unexpected token =>

В ходе дальнейшего расследования заметил, что в моей консоли появляется ошибка необработанного обещания. Что заставляет меня думать, что я неправильно определил свои контроллеры

internal/process/warning.js:18 (node:16328) Warning: a promise was created in a handler at D:\Programs\ColdFusion2016\cfusion\wwwroot\vue_starter\node_modules\express\lib\router\index.js:335:12 but was not returned from it, see http:// goo.gl/ rRqMUw
    at Function.Promise.attempt.Promise.try (D:\Programs\ColdFusion2016\cfusion\wwwroot\vue_starter\node_modules\bluebird\js\release\method.js:29:9)

. Кто-нибудь видит что-то не так с контроллерами?

router.js

const express = require('express');
const router = express.Router();
const {
    asyncGet,
    asyncPost
} = require('../services/controllers')(router);
const sql = require('../services/sql');
const request = require('../services/request');

/// Get Users
asyncGet('/controller/getUsers', async(req, res, next) => {
    console.log('get: /controller/getUsers'); 
    const users = await sql.getUsers(); 
    res.status(200).json(users);   
});
/// Get Products
asyncGet('/controller/getProducts', async(req, res, next) => {
    console.log('get: /controller/getProducts'); 
    const products = await sql.getProducts(); 
    res.status(200).json(products);
});

module.exports = router;

controllers.js

module.exports = (router) => {
    const asyncGet = (route, handler) => {
        return router.get(route, (req, res, next) => {
            handler(req, res, next)
            .catch(error => {
                next(error);
            });
        });
    };
    const asyncPost = (route, handler) => {
        return router.post(route, (req, res, next) => {
            handler(req, res, next)
            .catch(error => {
                next(error);
            });
        });
    };
    return { asyncGet, asyncPost };
};

enter image description here

1 Ответ

0 голосов
/ 29 июня 2018

Чтобы ESLint поддерживал async..await, его поддержка должна быть включена в конфигурации ESLint:

{
    "parserOptions": {
        "ecmaVersion": 2017
    }
}
...