2016-10-03 49 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(); 
};