无法将bindNodeCallback与节点mysqlconnection.query一起使用



我正在尝试使用bindNodeCallback将connection.query转换为返回observable的函数。

const mysql = require('mysql2');
const { bindNodeCallback } = require("rxjs");
const connection = mysql.createConnection({host:"servername", user: "u", password:"p", database:"mydb" });
connection.connect();
let q = 'SELECT 1 from dual';
//1.This works. Default api
connection.query(q, (err, v)=>console.log(v));
//2.this throws: TypeError: Cannot read property 'config' of undefined
//bindNodeCallback(connection.query)(q).subscribe(v=>console.log(v));
//3.This returns a two dimensional array where the first element contains an array with the results and the second an array of ColumnDefinition.
bindNodeCallback(connection.query).call(connection, q).subscribe(v=>console.log(v));

报表1打印:[ TextRow { '1': 1 } ]

语句2抛出:TypeError: Cannot read property 'config' of undefined,在调试代码后,我看到它引用了this.config(Connection对象内部(,根据文档,在调用输出函数时需要提供CCD_4。

因此,我将this添加到语句3中,但由于某种原因,我没有得到我所期望的:

报表3打印:[[ TextRow { '1': 1 } ],[ColumnDefinition { _buf:..., _clientEncoding: 'utf-8'....]]

我的问题是,我应该如何使用bindNodeCallback()打印语句1打印的结果?

注意:如果你想用旧版本的mysql测试这个问题,你可以使用mysql而不是mysql2,因为相同的问题只发生在不同的类型TextRow=>12和CCD_ 13=>FieldPacket

bindNodeCallback将创建一个函数,该函数返回一个可观测值,订阅该可观测值将流式传输唯一包含以下值的值:

  • 传递给回调的参数(如果有(
  • 传递给回调的参数的array(如果不止一个(

mysqlmysql2query()的回调传递两个参数:一个是包含结果的数组,另一个是含有列定义的数组。

要进行验证,请调用connection.query(q, (err, v, colDef)=>console.log(v, colDef));以查看它是否也将打印列定义。

因此,由于参数是两个,传递给订阅的函数应该接收一个数组,而不是单个参数。

"我应该如何使用bindNodeCallback()打印语句1打印的结果">

像现在这样调用它,只需从map传递,即可只获取第一个参数(回调参数数组索引0处的参数(:

bindNodeCallback(connection.query).call(connection,q)
.pipe(map(arr=>arr[0])).subscribe(v=>console.log(v));

相关内容

  • 没有找到相关文章

最新更新