2017-05-16 18 views
1

私は約束をしていますが、私は問題を抱えています。それはベストプラクティスの問題です。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つに解決する約束です。 したがって、検証は機能せず、すべてを取り除くだけです...

+3

を助けたすべての人に

email.nodeValues 

感謝をプレーンなオブジェクトを取るために良いだったた 「*動作するはずです。ネイティブの約束を使っていますか? –

+1

'then'に渡されたコールバックからの約束を返すことは、その約束をチェーンの下で解決して、そこにあるコードが機能するはずです。 – nem035

+0

'console.log'の代わりに' console.log.bind(console) 'を実行するとどうなりますか? – josh

答えて

-3

どうやってですか?

validate(req.body, bodyValidationSchema) 
.then(validated_data => { 
    return db.model.create(validated_data, other_parameters); 
}) 
.then(console.log) 
+1

これは同じコードです。 –

1

これは申し訳ありませんが、結局のところ私はPromiseのSequelize Modelインスタンスに間違いがあります。しかし、私はできない」*私は、パラメータで与えられた約束を持っていなかったので、すべては私がちょうどそのインスタンスから

関連する問題