2015-11-12 15 views
7

このエラーが発生しています。それを解決する方法を知っている。 ノードjsサーバーで、私はいくつかの.then()関数を約束しています。最後に、何らかの理由で認識されない.catch()関数を配置しました。 チュートリアルの多くの箇所で、これがエラーの処理方法であることがわかりました。 私は外部ライブラリを使用していません。TypeError:promise.then(...)。then(...)。then(...)。then(...)。catchはノードJsの関数ではありません

エラー:

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

これは私のコードです:

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}); 
}); 
} 

.catchは()約束のエラーを処理するための正しい方法ではない場合、あなたは何を示唆していますか?イムは、外部ライブラリを使用して回避し、ネイティブのJavaScriptに

EDITを使用して好むしようとしている:ソリューション

私は私はこの問題を解決する助けた青い鳥と呼ばれるNPMモジュールを追加しました。

+0

'.catch()' 'try'ブロックのためです:あなたは幸いにもマングースが使用するデフォルトの約束を、上書きすることができます。 'then'ブロックにエラーが返された場合は、新しいエラーを投げる –

+1

現在の[answer](http://stackoverflow.com/a/33678090/691711)が役に立たない場合、どのようなPromise' Album.findOne()。ここで() 'は返されます。おそらく、使用しているnode.jsのバージョンも含まれています。 – zero298

答えて