私は約束をしていますが、私は問題を抱えています。それはベストプラクティスの問題です。ES6のネストされた約束
Iオブジェクト(検証対象)に解決する約束を返す関数があります。私は検証データから、データベース内のオブジェクトを作成し、別の機能を有する
validate(req.body, bodyValidationSchema)
および解決に約束を返します作成したオブジェクト:
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);
}
});
}
を示している実際のコードは次のとおりです。)...非常に明確
は、非常に多くの Giltho
EDITをありがとう3行目は、単純なオブジェクトではなく、1つに解決する約束です。 したがって、検証は機能せず、すべてを取り除くだけです...
を助けたすべての人に
感謝をプレーンなオブジェクトを取るために良いだったた 「*動作するはずです。ネイティブの約束を使っていますか? –
'then'に渡されたコールバックからの約束を返すことは、その約束をチェーンの下で解決して、そこにあるコードが機能するはずです。 – nem035
'console.log'の代わりに' console.log.bind(console) 'を実行するとどうなりますか? – josh