【发布时间】:2016-08-29 13:18:25
【问题描述】:
我正在尝试使用 Promise 设置我的代码流,但我无法掌握哪些可以做,哪些不能做。
假设我有一个注册函数,我想要:
a) 注册用户 b) 记录注册过程 c) 发送激活邮件 d) 返回回调的答案
我首先查看用户是否已经存在,如果不存在,则抛出 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 对象?
如果您需要更多信息,请告诉我
【问题讨论】:
-
不确定 1),但至于 2),您可以在
User.getByEmail之前的行中声明var finalUser;(或任何听起来合乎逻辑的内容),然后在第二个.then()中声明finalUser = user块,因此finalUser变量在您的最终then()块中可用 -
您的建议很有效,谢谢!
标签: node.js typescript bluebird