2017-06-28 1 views
2

Das ist wie eine einfache Google scheint, aber ich kann nicht die Antwort zu finden scheinen ...Passing in Async Funktionen Node.js Express.js Router

Kann passieren Sie in ES7 Asynchron-Funktionen auf den Express-Router ?

Beispiel:

var express = require('express'); 
var app = express(); 

app.get('/', async function(req, res){ 
    // some await stuff 
    res.send('hello world'); 
}); 

Wenn nicht, können Sie zeigen Sie mir in die richtige Richtung, wie dieses Problem ES7 Stil zu behandeln? Oder muss ich nur Versprechungen machen?

Danke!

+0

Ich denke Express verarbeitet bereits die Anfrage in Async-Mode. Wenn eine andere Anfrage eingeht, wird sie nicht bis zum Ende warten. –

+0

Ich habe die Vermutung, dass asynchrone Funktionen funktionieren sollten ... aber ich hätte gerne Dokumentation, um zu beweisen, dass ich falsch oder richtig bin. – ForgetfulFellow

+0

'https: // www.npmjs.com/paket/express-async-router' Ich denke, das ist etwas, das Sie suchen? –

Antwort

5

Möglicherweise haben Sie keine Ergebnisse gefunden, weil async/await eine ES7 nicht ES6-Funktion ist, ist es in Knoten> = 7.6 verfügbar.

Ihr Code wird in Knoten arbeiten. ich den folgenden Code

var express = require('express'); 
var app = express(); 

async function wait (ms) { 
    return new Promise((resolve, reject) => { 
    setTimeout(resolve, ms) 
    }); 
} 

app.get('/', async function(req, res){ 
    console.log('before wait', new Date()); 
    await wait(5 * 1000); 
    console.log('after wait', new Date()) 
    res.send('hello world'); 
}); 

app.listen(3000, err => console.log(err ? "Error listening" : "Listening")) 

Und voila

MacJamal:messialltimegoals dev$ node test.js 
Listening undefined 
before wait 2017-06-28T22:32:34.829Z 
after wait 2017-06-28T22:32:39.852Z 
^C 

basicaly Sie es bekommen, haben Sie auf ein Versprechen in seinem Code async eine Funktion, um await getestet haben. Dies wird in Knoten LTS v6 nicht unterstützt, daher kann babel verwendet werden, um Code zu transpilieren. Hoffe, das hilft.

0

Ich denke, Sie können es nicht direkt tun, weil Ausnahmen nicht abgefangen werden und die Funktion nicht zurückkommt, wenn man geworfen wird. Dieser Artikel erklärt, wie eine Wrapper-Funktion erstellt wird, damit es funktioniert: http://thecodebarbarian.com/using-async-await-with-mocha-express-and-mongoose.html

Ich habe es nicht versucht, aber vor kurzem untersucht.

+0

Was hat das mit der Frage zu tun. Ausnahmen sind hier nicht der Punkt der Frage, aber wenn Sie etwas über das Übergeben der asynchronen Funktion erklärt hätten, wäre es großartig. –

0
​ 

​---------------------------------------------------------------------------------------------------------------- 
​async function GetTripSummary(trip_id, vin, job_id) 
{ 
    return new Promise((resolve, reject) => { 
     var tid = "Some-ID"; 
     var options = { 
      "method": "GET", 
      "hostname": "automotive.internetofthings.ibmcloud.com", 
      "port": 443, 
      "path": "/driverinsights/drbresult/tripSummaryList?trip_id=" + trip_id + "&tenant_id=" + tid + "&mo_id=" + vin + "&job_id=" + job_id, 
      "headers": { 
       "accept": "application/json", 
       "content-type": "application/json", 
       'Authorization': 'Basic ' + new Buffer("Something" + ':' + "Something").toString('base64') 
      } 
     }; 
     var req = https.request(options, function (res) { 
      var chunks = []; 
      res.on("data", function (chunk) { 
       chunks.push(chunk); 
      }); 
      res.on("end", function() { 
       var body = Buffer.concat(chunks); 
       console.log("[1]Map Matched Data Received From ContextMapping: \n\t") 
       console.log(body.toString()); 
       var data = JSON.parse(body); 
       resolve(data); 
      }); 
      res.on('error', function (e) { 
       reject('problem with request: ' + e.message); 
      }); 
     }); 
     req.end(); 
    }); 
} 
​ 
​---------------------------------------------------------------------------------------------------------------- 
​ 
​ 

    router.get('/cgcc/trip/start/:vin/:uid/:tripid', async function(req, res) 
    { 
     try { 
      var lvin = req.params.vin; 
      var user_id = req.params.uid; 
      var trip_id = req.params.tripid; 

      CC_Trip.find({ trip_id: trip_id, user_id: user_id, vin: lvin }, function (err, trips) { 
       //! A given user with same phone number exists*/ 
       if ((trips == undefined) || (trips.length <= 0) || (err != null)) { 
        //! End Processing 
        res.send({ 
         "user": 
         { 
          "responseCode": "409", 
          "userId": trip_id, 
          "messasge": "Trip does not exist" 
         } 
        }); 
       } 
       else //! User Exists 
       { 
        if (trips[0].moma_job_status == "SUCCEEDED") { 
         const response = await GetTripSummary(trips[0].trip_id, trips[0].vin, trips[0].moma_job_id); 
         return response; 
        } 
        else { 
         res.send({ 
          "user": 
          { 
           "responseCode": "301", 
           "userId": trip_id, 
           "messasge": "Background Analysis still going on" 
          } 
         }); 
        } 
       } 
      }); 
     } 
     catch (e) 
     { 
      console.log(body.toString()); 
     } 
    }); 
    ​ 

​=========================================================================================================================== 
​I keep on getting this error while compiling 
​ 
​const response = await GetTripSummary(trips[0].trip_id, trips[0].vin, trips[0].moma_job_id); 
              ^^^^^^^^^^^^^^ 

SyntaxError: Unexpected identifier 
    at createScript (vm.js:74:10) 
    at Object.runInThisContext (vm.js:116:10) 
    at Module._compile (module.js:533:28) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:503:32) 
    at tryModuleLoad (module.js:466:12) 
    at Function.Module._load (module.js:458:3) 
    at Module.require (module.js:513:17) 
    at require (internal/module.js:11:18) 
    at Object.<anonymous> (D:\PES_CC_POC\app.js:18:13) 
    at Module._compile (module.js:569:30) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:503:32) 
    at tryModuleLoad (module.js:466:12) 
    at Function.Module._load (module.js:458:3) 
    at Module.require (module.js:513:17) 
Waiting for the debugger to disconnect... 
​​===========================================================================================================================