gpt4 book ai didi

javascript - 使用 bluebird 管理顺序流中的异步操作

转载 作者:行者123 更新时间:2023-11-28 18:22:03 26 4
gpt4 key购买 nike

首先,我不会否认我对 Promise 很陌生,并试图在我的新 Node.js 应用程序中更好地管理 Promise。我根据我从 friend 和社区那里听到的消息使用 Bluebird 。这是一个场景:

该应用程序有一个注册流程,这是一个典型的用例,必须发生以下事件才能注册新用户:

  1. 检查用户是否已存在。
  2. 如果没有,请添加新用户。
  3. 发送验证电子邮件。

我确实有 3 个独立的函数来处理上述每个步骤。

现在这是我使用 Promise 流程想出的结果......但不知何故我不相信下面的代码:

user.isExistingUser(email)
.then((successData) => {
if(successData && successData.length === 0) {
user.signUp(signUpInfo)
.then((successData) => {
emailService.sendVerificationEmail(recipientInfo)
.then((successData) => {
res.json(responseUtility.getApiResponse(successData));
})
.catch((errorObj) => {
res.json(responseUtility.getApiResponse(null, null, errorObj));
});
})
.catch((errorObj) => {
res.json(responseUtility.getApiResponse(null, null, errorObj));
});
} else {
res.json(responseUtility.getApiResponse(null, [{
param: 'email',
msg: 'An account already exists with this email'
}], null));
}
})
.catch((errorObj) => {
res.json(responseUtility.getApiResponse(null, null, errorObj));
});

正如您所看到的,代码似乎有点太长,并且可能会变得有点难以跟踪。这里的一些 Bluebird 专家可以帮助提供更好或更易读的代码吗?

最佳答案

您应该更好地利用链接。始终从执行异步操作的函数返回 promise 。

user.isExistingUser(email).then(successData => {
if (successData && successData.length === 0) {
return user.signUp(signUpInfo).then(() => {
// ^^^^^^
return emailService.sendVerificationEmail(recipientInfo);
// ^^^^^^
}).then(successData => {
res.json(responseUtility.getApiResponse(successData));
});
} else {
res.json(responseUtility.getApiResponse(null, [{
param: 'email',
msg: 'An account already exists with this email'
}], null));
}
}).catch(errorObj => {
res.json(responseUtility.getApiResponse(null, null, errorObj));
});

关于javascript - 使用 bluebird 管理顺序流中的异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736979/

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