Tôi đã bắt đầu sử dụng lời hứa, tôi sử dụng Node.js Mango (với mongoose) và bluebird .. Vấn đề tôi gặp phải là vì một số lý do khi tôi kết nối cuộc gọi mongoose với chức năng quay trở lại những lời hứa (tôi giả sử đây là cách chính xác để trở lại và chuỗi) sau đó tôi nhận được:JavaScript Hứa hẹn và thiếu bluebird bắt và thất bại
typeError: Object #<Promise> has no method 'fail'
nếu tôi thay đổi thất bại trong việc bắt sau đó tôi nhận được cùng một vấn đề:
typeError: Object #<Promise> has no method 'catch'
những gì tôi làm là sử dụng chức năng (null, hàm) mẫu chính xác là không thành công nd bắt. Tuy nhiên, bắt/lỗi là dễ đọc hơn. Bất kỳ đầu mối nào tại sao tôi nhận được điều này và cách tôi nên giải quyết vấn đề này?
Dưới đây là ví dụ về khối mã.
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);
});
Và đây là stacktrace:
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)
bạn có thể chia sẻ dấu vết ngăn xếp không? –
Không sử dụng các lời hứa trả về bởi mongoose, chỉ promisifyAll và sử dụng '* Async' phương pháp độc quyền – Esailija
Ngoài ra,' mới Promise' bit bị từ hoãn mô hình – Esailija