[英]ES6 nested promises
我正在使用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,而是將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);
}
});
}
如果我嘗試在第三行打印“電子郵件”,則它不是一個普通的對象,而是一個可以分解為一個對象的承諾。 因此驗證不起作用,只是剝離了所有內容...
好吧,對此感到抱歉,但是最后我只是將Sequelize Model實例誤認為是Promise。 我沒有在參數中給出承諾,因此一切都很好,我只需要從該實例中獲取普通對象
email.nodeValues
謝謝大家的幫助
這個怎么樣?
validate(req.body, bodyValidationSchema)
.then(validated_data => {
return db.model.create(validated_data, other_parameters);
})
.then(console.log)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.