簡體   English   中英

ES6嵌套承諾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM