我已經開始使用承諾,我使用Node.js芒果(與貓鼬)和藍鳥.. 我遇到的問題是由於某種原因,當我鏈接貓鼬調用與函數返回的承諾(我假設這是返回正確的方式和連鎖),然後我得到:JavaScript承諾貓鼬和藍鳥缺少捕獲和失敗
typeError: Object #<Promise> has no method 'fail'
如果我改變趕不上然後我得到了同樣的問題:
typeError: Object #<Promise> has no method 'catch'
我所做的就是使用函數(null,function)模式,它完全失敗了抓住。 但是,catch/fail更具可讀性。任何線索爲什麼我得到這個以及我應該如何解決這個問題?
這是一個代碼塊的例子。
User.findOne({ 'email' : user_email }).exec()
}).then (promisedTransformUserSchemaToFrontendObjectWithProjectMapping)
.then (function (feUser) {
return new Promise(function (resolve, reject) {
res.json(feUser);
return resolve(feUser);
});
}).fail/catch (function (err) {
console.log(err);
sendError(res,"failed to get user",err);
});
這裏是堆棧跟蹤:
TypeError: Object #<Promise> has no method 'catch'
at module.exports.app.put.User.update.email (app\controllers\router.js:165:16)
at callbacks (node_modules\express\lib\router\index.js:164:37)
at isLoggedIn (app\controllers\router.js:741:10)
at callbacks (node_modules\express\lib\router\index.js:164:37)
at param (node_modules\express\lib\router\index.js:138:11)
at param (node_modules\express\lib\router\index.js:135:11)
at pass (node_modules\express\lib\router\index.js:145:5)
at Router._dispatch (node_modules\express\lib\router\index.js:173:5)
at Object.router (node_modules\express\lib\router\index.js:33:10)
at next (node_modules\express\node_modules\connect\lib\proto.js:193:15)
你能分享堆棧跟蹤嗎? –
不要使用貓鼬返回的承諾,只是promisifyAll和專門使用'*異步'方法 – Esailija
此外'新的承諾'位遭受延遲反模式 – Esailija