用promise调用控制器函数,而不能用then函数等待



我在控制器中有一个函数,如果数据库中满足某个条件,它希望创建两个不同的模型。API被称为:

PUT localhost:3000/用户

调用app.post('/user',user.create(

user.create在一个控制器文件中:

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)
})
}

在业务控制器中,它具有相同的功能:

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)没有承诺等待,我看不到业务主管的回复。我试着使用.then函数,但遇到了错误:

类型错误:无法读取未定义的的属性'then'

我该怎么做?我可以将模型导入到我的用户控制器中,然后在用户控制器中创建业务模型,但我想将目的分开。

只有当函数返回promise时,才能对其使用await,因此从业务控制器返回promise,而不是返回简单值。

您可以承诺您的业务控制器函数,然后在user.create函数中使用wait。这样做:

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)
})
}

现在承诺您的业务控制器功能。

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)
}
});
}

最新更新