Преобразование продолжения обещания в наблюдаемые результаты для дублирования массива - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующий код, предполагая, что какая-то модель Sequelize User с findQuery предназначена для возврата мне одной строки:

import { from } from 'rxjs';
import sequelize from './database.js'; // Database connection

let sql = "SELECT * FROM users WHERE id = $1";

let searchUser = sequelize.query(sql);
let searchUser$ = from(searchUser);

searchUser$.subscribe(console.log);

Я ожидаю, что это даст мне Observable<Array>, который выдает один массив с результатом в нем.

Задача

Он выдает мне один массив с двумя массивами, содержащими одно и то же значение:

[
   [ {id: "someid", name: "John", age: 12} ],
   [ {id: "someid", name: "John", age: 12} ]
]

Ожидаемое значение

[ {id: "someid", name: "John", age: 12} ]

Как мне исправить использование sequelize таким образом, чтобы оно возвращало только один набор результатов?Как мне избежать повторяющихся результатов?

1 Ответ

0 голосов
/ 29 января 2019

Причина наличия дублированных результатов в том, что Sequelize возвращает как результаты вашего запроса SQL, так и результаты метаданных .В некоторых случаях используемый вами механизм SQL возвращает результат в виде метаданных.

Что вы хотите сделать, это запретить Sequelize возвращать вам метаданные.

Ссылка на использование модели Sequelize

В тех случаях, когда вам не нужен доступ к метаданным, вы можете передать тип запроса, чтобы указать сиквелизу, как форматировать результаты.Например, для простого запроса на выборку вы можете сделать:

sequelize.query("SELECT * FROM `users`", { type: sequelize.QueryTypes.SELECT})
  .then(users => {
    // We don't need spread here, since only 
    // the results will be returned for select queries
  })

TL; DR Как мне запретить Sequelize возвращать метаданные?

Помимо передачи любых параметров, которые вы можетебыть обязательным в опциях запроса, также добавьте спецификатор типа к опциям запроса:

import { from } from 'rxjs';
import sequelize from './database.js'; // Database connection

let sql = "SELECT * FROM users WHERE id = $1";

let queryOptions = { 
    bind: [],
    type: sequelize.QueryTypes.SELECT
}

let searchUser = sequelize.query(sql, queryOptions);
let searchUser$ = from(searchUser);

searchUser$.subscribe(console.log);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...