2016-10-03 55 views
0

这是使用快速如何使用异步等待作为模块方法

const express=require('express'); 
const router=express.Router(); 

const trackRepo=require('../model/track'); 

router.post('/live',function(req,res){ 
    const time=1439832167; 
    const list=trackRepo.getAlerts(time); 
    res.json({list:list}); 
}); 

module.exports=router; 

当我用我写的路线,异步/ AWAIT:

const r=require('rethinkdb'); 
const config=require('../config/rethinkdb'); 

r.connect(config).then((conn)=>{ 
    module.exports.getAlerts=async (function(time){ 
     const cursor=await r.table('track').filter({createdAt:time}).run(conn); 
     return await cursor.toArray(); 
    }); 
}); 

这是我app.js

const express=require('express'); 
const app=express(); 
const server=require('http').createServer(app); 
const bodyParser=require('body-parser'); 
const cookieParser=require('cookie-parser'); 
const session=require('express-session'); 

// Utilities 
app.use(bodyParser.urlencoded({extended:true})); 
app.use(bodyParser.json()); 
app.use(cookieParser()); 

// Template 
app.set('view engine','ejs'); 

// Static 
app.use(express.static(__dirname+'/static')); 

// Middlewares 
app.use(require('./route/web')); 
app.use(require('./route/track')); 

// Listening 
app.listen(4444,function(){ 
    console.log('Server listening on port 4444...'); 
}); 

我写了一个名为server.js的文件,这应该是入口点,编译当我使用命令babel-node server.js启动服务器10在package.json

"devDependencies": { 
    "babel-cli": "^6.16.0", 
    "babel-core": "^6.17.0", 
    "babel-plugin-syntax-async-functions": "^6.13.0", 
    "babel-plugin-transform-async-to-generator": "^6.16.0", 
    "babel-plugin-transform-regenerator": "^6.16.1", 
    "babel-polyfill": "^6.16.0", 
    "babel-preset-es2015": "^6.16.0", 
    "babel-preset-latest": "^6.16.0" 
    } 

运行的服务器

require('babel/register'); 
require('./app.js'); 

这是我安装devDependencies的列表之前通天,它抛出Unexpected token在异步的await线。我按照我搜索的指南感到困惑,我不明白为什么它会一直抛出错误。我怎样才能解决这个问题?

+0

是等待r.table( '轨'),标记为异步函数?哦,..我敢肯定指定者( );也不是aysnc方法。 – Keith

+3

它是'(异步函数(时间){' –

回答

0

你得到,因为语法错误async(function(){ await … }),它调用一个用函数表达式作为参数,使用了await关键字尽管被标记为async函数表达式命名为async功能的异常。

应该

router.post('/live', async function(req,res){ 
    const time = 1439832167; 
    const list = await trackRepo.getAlerts(time); 
//    ^^^^^ it's a promise, so you need to await it 
    res.json({list:list}); 
}); 

const r = require('rethinkdb'); 
const config = require('../config/rethinkdb'); 

const connection = r.connect(config); 
module.exports.getAlerts = async function(time) { 
//       ^^^^^^^^^^^^^^ two keywords, nothing between 
    const conn = await connection; 
//    ^^^^^^^^^^^^^^^^ don't export functions asynchronously, just wait inside it 
    const cursor = await r.table('track').filter({createdAt:time}).run(conn); 
    return await cursor.toArray(); 
};