首页 > 解决方案 > Sequelize findOrCreate(...).spread 不是函数

问题描述

我正在使用 sequelize 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,
        questionId,
    },
    defaults: responseNewDetail,
}).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,
                allowNull: false,
                field: "Company_ID",
            },
...
    )

响应模型:

const ResponseModel = require("../models/response")
const Response = ResponseModel(sequelize, DataTypes)

有谁知道出了什么问题?

标签: javascriptnode.jssequelize.js

解决方案


由于您使用的是等待,因此您可以更改:

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,
        questionId,
    },
    defaults: responseNewDetail,
})
    return res.status(200).send({ status: 0, data: response })

一切都会好起来的。

但是,这并没有解决传播而不是功能的问题。为此,我只在从旧版本升级 sequelize 时才注意到这一点(我从版本 1 开始就一直在使用 sequelize)。您的传播示例确实应该有效,但无论出于何种原因,它都不再有效(它也不适合我)。通常我唯一一次使用传播而不是等待它是当我想推迟执行某些事情时。对或错,我已经开始解决这个问题,只需将 await/async 版本包装在:

setImmediate(async () => {
    // async things here
});

希望我有所帮助,如果我没有,对不起。


推荐阅读