Проблема здесь не в knex
, а в использовании его вместе с async
/ await
. С этим из пути, вот простой пример:
const subquery = catchAsync(async () => {
const res = await knex("author").select("id").where("id", ">", 1);
return res;
});
const knexQuery = catchAsync(async () => {
const res = await knex("author").where("id", "in", await subquery());
return res;
});
const test = catchAsync(async (knexQuery) => {
const res = await knexQuery();
console.log(res)
knex.destroy();
});
Я не могу понять, как передать subquery
в knexQuery
, поэтому он будет решен в нужный момент. В настоящее время он возвращает пустой массив, вот журнал отладки:
{
method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [ 1 ],
__knexQueryUid: '00baf1e0-81a5-11ea-9b17-3bbd9f85a577',
sql: 'select `id` from `author` where `id` > ?'
}
{
method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [ { id: 2 }, { id: 3 }, { id: 4 } ],
__knexQueryUid: '00bc7880-81a5-11ea-9b17-3bbd9f85a577',
sql: 'select * from `author` where `id` in (?, ?, ?)'
}
(empty array)
Я думал, что я await
во всех нужных местах. Очевидно, что нет. Что я пропустил?
Примечание: я особенно заинтересован в использовании async
/ await
здесь, а не в обещаниях.