2017-06-07 3 views
0

Ich habe ein Problem mit Knoten JS.Wie rufe eine Funktion im Knoten js auf?

Grundsätzlich habe ich diese Funktion:

let getImageName = function(query,callback){ 
    Images.getImageById(query,function(err,image){ 
    return image.filename; 
    }); 
} 

Aber wenn ich dies genannt, die console.log() print undefined, und ich weiß, dass die Funktion getImageName arbeitet.

app.get('/api/books/:_id', function(req, res){ 
Book.getBookById(req.params._id, function(err,book){ 
    if(err){ 
     throw err; 
    } 
    console.log(getImageName(book.cover)); 
}); 
}); 

Antwort

0

Sie versuchen, einen Wert von einem Rückruf an eine asynchrone Funktion zurückzugeben. Sie funktionieren nicht so. Sie behandeln getImageById() wie es ist synchron, aber getImageById() ist asynchron (was ist möglich, aus der Art, wie es einen Rückruf dauert) abzuleiten.

Images.getImageById(query,function(err,image){ 
    return image.filename; 
    }); 

Je nach Anwendungsfall gibt es viele Lösungen. Die einfachste könnte sein, um die console.log() in diesen Rückruf zu bewegen. (Aber wenn man dann die console.log() auf eine return Anweisung ändern, werden Sie das gleiche Problem haben alle immer wieder.)

Wenn das alles verwirrend ist, gibt es eine kurze Erklärung bei https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/.

+0

Hallo, danke für deine Antwort, ich löse dies mit Callback. 'GetImageName = function (Abfrage, Rückruf) { \t Images.getImageById (; \t} Abfrage-Funktion (err, Bild) { \t \t Rückruf (image.filename)) lassen; } 'und ich mache den Anruf' getImageName (book.cover, Funktion (Antwort) { \t \t \t book.cover = Antwort; \t \t \t res.json (Buch); \t \t}); 'Das funktioniert für mich. –

Verwandte Themen