gpt4 book ai didi

javascript - ES6 嵌套 Promise

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

我正在使用 Promise,但我遇到了一个问题,这更多的是最佳实践的问题。

我有一个函数,它返回一个解析为对象(经过验证的对象)的 promise :

validate(req.body, bodyValidationSchema)

我有另一个函数,根据验证的数据在数据库中创建一个对象,并返回解析到创建的对象的 promise :

db.model.create(validated_data, other_parameters)

但是,我不能仅仅使用它们来链接这些函数,例如:

validate(req.body, bodyValidationSchema)
.then(validated_data => db.model.create(validated_data, other_parameters))
.then(console.log)

因为,最后一行不会打印created_object,而是打印一个解析为created对象的Promise。因此我必须做这样的事情,嵌套 promise :

validate(req.body, bodyValidationSchema)
.then(validated_data =>
db.model.create(validated_data, other_parameters)
.then(console.log)
)

有更好的方法吗?另外,如果我用异步任务替换 console.log 并在该任务之后添加另一个“.then()”,而不是在该任务之后而是在更大的任务之后,它不会等待最后一个任务(我不知道这是否很清楚......)

非常感谢,吉尔托

编辑:这是显示问题的实际代码

function createEmailView(req, res) {
validate(req.body, emailCreationSchema)
.then(validatedBody =>
db.Email.create({ email: validatedBody.email, userLogin: req.user.login }))
.then(email => validate(email, emailSchema, { stripUnknown: true }))
.then((validatedEmail) => { console.log(validatedEmail); return validatedEmail; })
.then((validatedEmail) => {
res.status(201).json(validatedEmail);
})
.catch((error) => {
if (error instanceof Sequelize.ValidationError || error.isJoi) {
res.status(400).json(makeStandardErrorOfValidationError(error));
} else {
res.status(500).json(error);
}
});
}

如果我尝试在第三行打印“电子邮件”,它不是一个普通的对象,而是一个解析为一个的 promise 。因此验证不起作用,只会删除所有内容......

最佳答案

好吧,对此感到抱歉,但最终我只是将 Sequelize Model 实例误认为是 Promise。我没有在参数中给出 promise ,因此一切都很好,我只需从该实例中获取普通对象

email.nodeValues

感谢所有提供帮助的人

关于javascript - ES6 嵌套 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44010104/

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