2016-07-31 27 views
0

Ich verwende das neueste Co-Modul (4.6).Verlust der Parameter von Co-Wrapped-Funktion zu einem anderen

Dies ist eine Koa-Middleware. Daher ist es bereits co() verpackt.

create: function *() { 
    try { 
    this.body = yield services.createIt({obj: true}) 
    } catch (err) { 
    this.body = { "errors": err.details } 
    this.status = err.status 
    } 
} 

Es ist eine weitere Generator-Funktion aufruft Ich Einwickeln manuell mit co:

const co = require('co') 

createIt: co(function * (obj) { 
    console.log(obj) // --> undefined 
} 

Warum muß ich "lose" die Parameter?

+0

Sie wahrscheinlich 'co.wrap' auf' createIt' statt 'co' verwenden wollen, aber es ist schwer, aus den vielen Syntaxfehler, dass zu sagen, Schnipsel – Bergi

Antwort

1

Die Funktion co führt die angegebene Generatorfunktion sofort mit der Async/await-Semantik aus. Wenn Sie es nur von einer Koa-Middleware verwenden, müssen Sie die Funktion createIt nicht mit co umbrechen, oder Sie können einfach co.wrap verwenden, um den Generator in eine Funktion umzuwandeln, die ein Versprechen zurückgibt (verzögerte Zusage). Prüfen https://github.com/tj/co/blob/master/index.js#L26

create: function *() { 
    try { 
    this.body = yield services.createIt({obj: true}) 
    } catch (err) { 
    this.body = { "errors": err.details } 
    this.status = err.status 
    } 
} 

services.js

const co = require('co') 

createIt: function * (obj) { 
    console.log(obj) 
} 

// OR 

createIt: co.wrap(function *(obj) { 
    console.log(obj); 
});