如何在 nodejs 中承诺我的 Class
How to promisify my Class in nodejs
我正在使用 bluebird 在我的自定义库中实现 promisify。我有以下库
用户、lib-1、lib-2 等
关于用户注册,来自我的用户路由器
// user_router.js
var user = new User();
var lib1 = new Lib1();
var lib2 = new Lib2();
// I am expecting, all method will be async by following 3 lines!
Promise.promisifyAll(user);
Promise.promisifyAll(lib1);
Promise.promisifyAll(lib2);
user.validationAsync(payload)
.then(function(result_from_validation) {
return lib1.validationAsync(payload);
})
.then(function(result_lib1_validation)) {
return lib2.validationAsync(payload)
})
.then(function(result_lib2_validation)) {
// final save
user.registerAsync(payload);
lib1.saveAsync(payload);
lib2.saveAsync(payload);
return {'response-data'}
})
.then(function(response)) {
// send response
res.json('success', 'User successfully created', {});
})
.catch(function(error)) {
//all error will be handled here
//these error will be either throw or by promise rejected.
res.json('error', error.message, {error.stack});
})
在验证方法中我抛出类似
的错误
//user_lib.js
// This throw will be handled by router catch. ???
throw Error('Field value is invalid');
在保存方法中,mongooes modal 也有一些验证,比如用户已经存在,所以无法创建用户。
function register (payload)
{
// payload data binded on user_modal here
var user_modal = getUserModal(payload);
user_modal.saveAsync()
.then(function(){})
.catch(function(error){
//How to handle error here and send this error to router
})
}
以上只是我的期望。我想发送来自 user_router.js 的所有回复。 (我的用户模块已经实现了。现在需要通过bluebird集成)
现在提问::
- bluebird 怎么办?如何设置 resolve/reject 方法
用户对象(明确地)??
- 如果验证方法抛出错误,那么它
会被router catch方法捕获吗???
我怎样才能发送任何
error/rejection 从 mongooes 到路由器的捕获(见用户注册
方法)?
我希望你能得到我的分数。提前致谢!!
您还可以分享任何示例 link 来实现这些东西。
现在我对普通语句使用 try catch,对异步错误处理使用 promise!! :) 非常感谢 guyz
我正在使用 bluebird 在我的自定义库中实现 promisify。我有以下库
用户、lib-1、lib-2 等
关于用户注册,来自我的用户路由器
// user_router.js
var user = new User();
var lib1 = new Lib1();
var lib2 = new Lib2();
// I am expecting, all method will be async by following 3 lines!
Promise.promisifyAll(user);
Promise.promisifyAll(lib1);
Promise.promisifyAll(lib2);
user.validationAsync(payload)
.then(function(result_from_validation) {
return lib1.validationAsync(payload);
})
.then(function(result_lib1_validation)) {
return lib2.validationAsync(payload)
})
.then(function(result_lib2_validation)) {
// final save
user.registerAsync(payload);
lib1.saveAsync(payload);
lib2.saveAsync(payload);
return {'response-data'}
})
.then(function(response)) {
// send response
res.json('success', 'User successfully created', {});
})
.catch(function(error)) {
//all error will be handled here
//these error will be either throw or by promise rejected.
res.json('error', error.message, {error.stack});
})
在验证方法中我抛出类似
的错误//user_lib.js
// This throw will be handled by router catch. ???
throw Error('Field value is invalid');
在保存方法中,mongooes modal 也有一些验证,比如用户已经存在,所以无法创建用户。
function register (payload)
{
// payload data binded on user_modal here
var user_modal = getUserModal(payload);
user_modal.saveAsync()
.then(function(){})
.catch(function(error){
//How to handle error here and send this error to router
})
}
以上只是我的期望。我想发送来自 user_router.js 的所有回复。 (我的用户模块已经实现了。现在需要通过bluebird集成)
现在提问::
- bluebird 怎么办?如何设置 resolve/reject 方法 用户对象(明确地)??
- 如果验证方法抛出错误,那么它 会被router catch方法捕获吗???
我怎样才能发送任何 error/rejection 从 mongooes 到路由器的捕获(见用户注册 方法)?
我希望你能得到我的分数。提前致谢!!
您还可以分享任何示例 link 来实现这些东西。
现在我对普通语句使用 try catch,对异步错误处理使用 promise!! :) 非常感谢 guyz