Express,第二次调用then()函数,用猫鼬保存对象后返回未定义对象
Posted
技术标签:
【中文标题】Express,第二次调用then()函数,用猫鼬保存对象后返回未定义对象【英文标题】:Express, calling then() function second times, return undefined object after saving an object with mongoose 【发布时间】:2021-05-23 20:06:45 【问题描述】:我想通过发布者功能向 nats 流媒体服务器发送数据。为此,我需要一秒钟然后在猫鼬模型保存上起作用。但是当我第二次调用 then() 函数时,
then(result => )
结果返回为未定义。
todo.save().then(result =>
console.log(result)
res.status(201).json(
message : "done",
todo : result
);
).then(result =>
console.log(result); // ===> this return undefined
//natsPublisher(result.title, result.context); ===> I want to send this info to nats streaming
)
.catch(err=>
console.log(err);
res.status(500).json(
message : "There is an error"
)
)
我该如何解决这个问题?也许我的结构很糟糕。如果很糟糕,请告诉我。
【问题讨论】:
【参考方案1】:需要从第一个then()
方法的回调函数中返回result
。
todo.save()
.then(result =>
...
return result;
)
.then(result =>
// access result
)
每个then()
方法调用都会返回一个Promise
,并且Promise
是被满足还是被拒绝,具体取决于您从该特定then()
方法的回调函数返回的内容。
如果您从回调函数返回一个非承诺值,则包装器 then()
方法返回的 Promise
将使用该值实现,并且该实现的值将作为参数传递给下一个then()
方法(如果存在)。
如果您从then()
方法的回调函数返回Promise
,则该then()
方法返回的Promise
将解析 为由返回的Promise
它的回调函数。这意味着 then()
方法返回的 Promise
将被执行或拒绝,具体取决于其回调函数返回的 Promise
发生的情况。
如果回调函数返回的Promise
用非承诺值实现,则then()
方法返回的Promise
用相同的值实现,并且该值作为参数传递给回调下一个then()
方法的函数(如果存在)。
也许我的结构很糟糕。如果很糟糕,请告诉我。
我不明白你为什么需要第二个then()
方法。您可以在第一个then()
方法的回调函数中将数据传递给natsPublisher()
函数。
【讨论】:
以上是关于Express,第二次调用then()函数,用猫鼬保存对象后返回未定义对象的主要内容,如果未能解决你的问题,请参考以下文章