gpt4 book ai didi

node.js - Catch->Then->Catch 使用 Bluebird 的示例

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:31 25 4
gpt4 key购买 nike

我正在尝试使用 Promise 设置我的代码流,但我无法掌握什么是可以做的,什么是不能做的。

假设我有一个注册函数,我想要:

a) 注册用户b) 记录注册过程c) 发送激活电子邮件d) 返回回调的答案

我首先查看用户是否已存在,如果不存在,则抛出 StorageError ,并在下一个 catch block 中捕获。

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 对象?

如果您需要更多信息,请告诉我

最佳答案

要访问用户对象,您可以在用户对象存在的范围内继续。关于错误处理:您只需要在最后捕获错误。无论如何,它们都会通过 promise 链。

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

关于node.js - Catch->Then->Catch 使用 Bluebird 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com