这个问题有点不清楚,因为错误本身还不清楚。主要的问题是什么情况下会导致空的序列化模型填充器失效。
user.js
const db = require('../db/models');
async testFunc function(data){
return new Promise((resolve, reject)=>{
try{
let user = await db.User.findOne({where:{id:data.id}});
resolve(user)
}catch(error){reject(error)}
})
}
module.exports={
testFunc
}
这是模块定义的代码片段,可以单独运行。但是,假设如果未在其他模块中使用该数据库,则该数据库未加载,因此会引发错误db.User未定义
user.js
async testFunc function(data){
return new Promise((resolve, reject)=>{
const db = require('../db/models');
try{
let user = await db.User.findOne({where:{id:data.id}});
resolve(user)
}catch(error){reject(error)}
})
}
module.exports={
testFunc
}
当前解决方法是在每个函数中都需要模型加载器(也有其他类似的函数)。
只需抛出问题以了解可能的错误并找到更好的方法。
您的问题似乎指向如何异步导入诺言:
传统的最常见的导入模块的方法是使用CommonJS
语法
const React = require('react');
第二种方法,尤其是在React和Angular生态系统中越来越流行,是EcmaScript模块:
import { <function> } from './index.js';
第三是Dynamic Import,这是您在第二个示例中进行数据库相关操作时动态加载模块所需要的。
这是第二个示例中需要的。在执行与数据库相关的操作时动态加载模块
async testFunc function(data){
return new Promise((resolve, reject)=>{
const db = require('../db/models');
import('./db/models').then(dialogBox => {
let user = await db.User.findOne({where:{id:data.id}});
resolve(user)
})
.catch(error => {
reject(error);
})
})
DB模型的结果是一个承诺。一旦模块完全加载,Promise就会完成。