如何解决续发findOrCreate...spread不是函数
我正在使用续集6。运行findOrCreate().spread
时,它说“ findOrCreate(...)。spread不是函数”。这是我的代码:
const response = await Response.findOrCreate({
where: {
participantId,questionId,},defaults: responseNewDetail,})
return res.status(200).send({ status: 0,data: response })
这可以正常工作,但是不会将创建的状态和模型值分开。 当我尝试使用传播时:
Response.findOrCreate({
where: {
participantId,}).spread(function(response,created){
return res.status(200).send({ status: 0,data: response })
})
它说“ Response.findOrCreate(...)。spread不是函数”。 这是模型文件(response.js):
const { Sequelize } = require("sequelize")
module.exports = (sequelize,DataTypes) =>
sequelize.define(
"Response",{
responseId: {
type: DataTypes.INTEGER,primaryKey: true,allowNull: false,field: "Response_ID",autoIncrement: true,companyId: {
type: DataTypes.INTEGER,field: "Company_ID",...
)
响应模型:
const ResponseModel = require("../models/response")
const Response = ResponseModel(sequelize,DataTypes)
有人知道怎么了吗?
解决方法
由于您正在使用await,因此可以更改:
const response = await Response.findOrCreate({
where: {
participantId,questionId,},defaults: responseNewDetail,})
return res.status(200).send({ status: 0,data: response })
到
const [ response,created ] = await Response.findOrCreate({
where: {
participantId,data: response })
一切都会好起来的。
这并没有解决传播不是功能问题。为此,我仅在从较早版本升级sequelize时才注意到这一点(从版本1开始,我一直在使用sequelize)。您的传播示例确实应该起作用,但是无论出于何种原因,它都不再起作用了(对我而言也没有)。通常,只有当我想推迟执行某件事时,我才使用扩展而不是仅仅等待它。对与错,我已经开始通过将await / async版本包装在以下内容中来解决该问题:
setImmediate(async () => {
// async things here
});
希望我能帮上忙,如果没有的话,对不起。
,详细说明Brian's Answer :-
findOrCreate
返回两个值第一个模型实例和第二个创建状态,
所以你可以使用
const [model,created] = ModelName.findOrCreate();
(您的案例中的模型响应)
获取创建状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。