簡體   English   中英

調用 controller function 與 promise 無法等待,然后 ZC1C425268E68385D1AB50741C

[英]calling a controller function with promise unable to await with then function

如果數據庫中滿足條件,我在 controller 中有一個 function 想要創建兩個不同的模型。 API 被調用:

PUT 本地主機:3000/用戶

調用 app.post('/user', user.create)

user.create 在 controller 文件中:

const business = require("./controllers/business.controller.js");

exports.create = (req,res) => {

    const user = new User ({
    email: req.body.email
    uniqueAccount: req.body.unique
    })

    User.create (user, function(err,doc){
        if (err) res.status(500).send(err)
        if (user.uniqueAccount) {
            let result = business.create(req,res)
            console.log(result)
        }

        res.send(doc)
    })
}

在業務 controller 中,同樣是 function:

exports.create = (req,res) => {
    const business = new Business({
        name: req.body.businessname
    })

    Business.create (business, function(err,doc){
        if (err) return err
        return doc
    }
}

因為我的行:

let result = business.create(req,res)沒有 promise 等待,我無法看到來自業務 controller 的返回。 我嘗試使用 a.then function 但我遇到了錯誤:

TypeError:無法讀取未定義的屬性“then”

我該如何正確 go 關於這個? I could just import the model into my user controller, and then create the business model in the user controller but I wanted to separate the purposes.

僅當 function 返回 promise 時,您才可以在 function 上使用 await,因此請從您的業務 Z594C103F2C6E0E4C3D 中返回 promise 而不是返回簡單值 promise。

您可以承諾您的業務 controller function 然后在您的 user.create function 中使用 await。 像這樣做:

     const business = require("./controllers/business.controller.js");

     exports.create = (req,res) => {

        const user = new User ({
        email: req.body.email
        uniqueAccount: req.body.unique
     })

     User.create (user, async function(err,doc){
       if (err) res.status(500).send(err)
       if (user.uniqueAccount) {
         let result = await business.create(req,res)
         console.log(result)
       }

       res.send(doc)
      })
    }

現在承諾您的業務 controller function。

      exports.create = (req,res) => {
        return new Promise((resolve,reject)=>{
          const business = new Business({
            name: req.body.businessname
          })

          Business.create (business, function(err,doc){
             if (err) reject(err)
             resolve(doc)
          }
        });
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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