nodejs.TypeError: You may only yield a function, promise, generator, a rray, or object, but the following object was passed: "undefined
这是什么error
yield 就是等… 你没法等一个 undefined 值 你没法叫醒一个装睡的人 这个意思…
@magicdawn 那怎么叫醒呢我着急让他干活
你要看看的是yieldable 5种,https://github.com/i5ting/asynchronous-flow-control#yieldable-5种
@i5ting 狼叔我这样写的 const user = yield app.mysql.get(‘cpap_user’);
@Rock-1 get的返回类型是什么?
@i5ting 是个array,打印的时候是个undefined,我怀疑是不是我用egg用的不对
@Rock-1 yield后面可以接array,但array里的元素类型是thunk或promise么?让你看文档你就是不看啊
@Rock-1 你egg用得不对
@Rock-1 你配置没配好,导致mysql单例没有加载成功,所以app.mysql是个原始Singleton而不是mysql的实例,原始Singleton带有get这个函数是用于支持多数据库的。所以实际上你是get是触发了获取一个名为cpap_user的mysql实例,而不是mysql实例的get一个table的操作,但是实际上你没有配置多数据库,所以就返回了undefined。 你企图yield 一个undefined,所以报错了
详细见 https://github.com/eggjs/egg/blob/73095e2c04d6493d34061c51272b70d5b6c21aa9/lib/egg.js#L308 还有 https://github.com/eggjs/egg/blob/73095e2c04d6493d34061c51272b70d5b6c21aa9/lib/core/singleton.js#L47
建议贴一下你mysql的配置
@i5ting 狼叔冷静
@AnzerWall 哈哈,没事
exports.mysql = {
// 单数据库信息配置
client: {
// host
host: '127.0.0.1',
// 端口号
port: '3306',
// 用户名
user: 'root',
// 密码
password: '',
// 数据库名
database: 'efang',
},
// 所有数据库配置的默认值
default: {
database: 'egg_demo'
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};
@AnzerWall 这个就是单个数据链接,我看官网上是这样写的
@Rock-1 库和插件版本呢
@AnzerWall “egg-mysql”: “^2.0.0”,
去官方提 issue 吧,最好附上一个最小可复现问题的仓库