2015-11-12 1 views
7

Im ottenendo questo errore e io non sapere come risolverlo In un server js del nodo, sto usando una funzione .then() su una promessa e alla fine ho inserito una funzione .catch() che per qualche motivo non viene riconosciuta. Ho visto in molti posti in tutorial che questo è il modo in cui viene gestito un errore. Non sto usando nessuna libreria esterna.TypeError: promise.then (...). Then (...). Then (...). Then (...). Catch non è una funzione in Node Js

L'errore:

TypeError: promise.then(...).then(...).then(...).then(...).catch is not a function 

Questo è il mio codice:

exports.joinAlbum = function(req, res){ 


var promise = Album.findOne().where({'shortId': req.body.shortId}).exec(); // Returns a promise 


promise.then(function(albumDoc){ 
    console.log('Then #1'); 

    ..... 

    } 
    return albumDoc.save(); // Returns a promise 
}) 



.then(function(albumDoc){ 
    console.log('Then #2'); 

    ..... 

    return User.findById(req.body.userId).exec(); // Returns a promise 
}) 


.then(function(userDoc){ 
    console.log('Then #3'); 

    ........ 

    return userDoc.save(); // Returns a promise 
}) 

// Return a response 
.then(function(savedUserDoc){ 
    console.log('Then #4'); 
    return res.status(200).json({success: true}); 
}) 

    //Error handler 
.catch(function(err){ 
    console.log('Catch #1'); 
    console.log(err); 
    res.status(200).json({success: false}); 
}); 
} 

Se .catch() non è il modo corretto di gestire l'errore promessa, cosa suggerisci? Nel tentativo di evitare l'uso di librerie esterne e preferiscono utilizzando JavaScript nativo

EDIT: soluzione

ho aggiunto un modulo NPM chiamato blu-uccello che mi ha aiutato a risolvere questo problema.

+0

'.catch()' è per un blocco 'try'. Se viene restituito un errore nel blocco 'then', genera un nuovo errore –

+1

Se la [risposta] attuale (http://stackoverflow.com/a/33678090/691711) non è utile, si prega di dire quale tipo di Promessa' Album.findOne(). Dove() 'restituisce, come in quale libreria se non ** ES6 **. Forse includi anche la versione di node.js che stai utilizzando. – zero298

risposta