续发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();

(您的案例中的模型响应)

获取创建状态。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...