使用 Bluebird 的 Catch->Then->Catch 示例
Catch->Then->Catch example with Bluebird
我正在尝试使用 promises 设置我的代码流,但我没能掌握什么是可以做的,什么不是。
假设我有一个注册函数,我想在其中:
a) 注册用户
b) 记录注册过程
c) 发送激活邮件
d) return回调的答案
我首先查看用户是否已经存在,如果不存在,则抛出 StorageError
,并在下一个 catch
块中捕获。
let basicRegister = function (request: any, reply: any) {
let seneca = this;
let act = Promise.promisify(seneca.act, { context: seneca });
User.getByEmail(email).then(function (user: any) {
throw new OperationError("Email already exists");
}).catch(StorageError, function (err: any) {
return User.create().catch(function (err: any) {
throw new OperationError(err.message);
});
}).then((user: any) => {
return UserActivity.create().catch(function (err: any) {
throw new OperationError(err.message);
});
}).then(function (confirmationMessage: any) {
//how can I obtain the user object here?
return { ok: true, user: user };
}).catch(OperationError, (error: any) => {
console.log(error);
return { ok: false, message: error.message };
}).asCallback(reply);
}
根据上面的代码,我有以下问题:
1 - 像本例中那样先捕获然后交错是正常的吗?如果不是,正确的做法是什么?
2 - 是否有可能在最终 then
中从之前的 then
中获取 user
对象?
如果您需要更多信息,请告诉我
为了访问用户对象,您可以在用户对象所在的范围内继续 exists.Regarding 您的错误处理:您只需要在最后捕获错误。他们无论如何都会通过承诺链。
let basicRegister = function(request: any, reply: any) {
let seneca = this;
let act = Promise.promisify(seneca.act, {
context: seneca
});
User.getByEmail(email).then(function(user: any) {
throw new OperationError("Email already exists");
}).catch(StorageError, function(err: any) {
return User.create();
}).then((user) => {
return UserActivity.create()
.then((confirmationMessage) => {
return {
ok: true,
user: user
};
});
}).catch(OperationError, (error: any) => {
console.log(error);
return {
ok: false,
message: error.message
};
}).asCallback(reply);
}
我正在尝试使用 promises 设置我的代码流,但我没能掌握什么是可以做的,什么不是。
假设我有一个注册函数,我想在其中:
a) 注册用户 b) 记录注册过程 c) 发送激活邮件 d) return回调的答案
我首先查看用户是否已经存在,如果不存在,则抛出 StorageError
,并在下一个 catch
块中捕获。
let basicRegister = function (request: any, reply: any) {
let seneca = this;
let act = Promise.promisify(seneca.act, { context: seneca });
User.getByEmail(email).then(function (user: any) {
throw new OperationError("Email already exists");
}).catch(StorageError, function (err: any) {
return User.create().catch(function (err: any) {
throw new OperationError(err.message);
});
}).then((user: any) => {
return UserActivity.create().catch(function (err: any) {
throw new OperationError(err.message);
});
}).then(function (confirmationMessage: any) {
//how can I obtain the user object here?
return { ok: true, user: user };
}).catch(OperationError, (error: any) => {
console.log(error);
return { ok: false, message: error.message };
}).asCallback(reply);
}
根据上面的代码,我有以下问题:
1 - 像本例中那样先捕获然后交错是正常的吗?如果不是,正确的做法是什么?
2 - 是否有可能在最终 then
中从之前的 then
中获取 user
对象?
如果您需要更多信息,请告诉我
为了访问用户对象,您可以在用户对象所在的范围内继续 exists.Regarding 您的错误处理:您只需要在最后捕获错误。他们无论如何都会通过承诺链。
let basicRegister = function(request: any, reply: any) {
let seneca = this;
let act = Promise.promisify(seneca.act, {
context: seneca
});
User.getByEmail(email).then(function(user: any) {
throw new OperationError("Email already exists");
}).catch(StorageError, function(err: any) {
return User.create();
}).then((user) => {
return UserActivity.create()
.then((confirmationMessage) => {
return {
ok: true,
user: user
};
});
}).catch(OperationError, (error: any) => {
console.log(error);
return {
ok: false,
message: error.message
};
}).asCallback(reply);
}