Инициализация нескольких БД с асинхронным ожиданием на верхнем уровне в узле - PullRequest
0 голосов
/ 14 мая 2019

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

Я пытаюсь инициализировать несколько соединений с базой данных и не могу получить правильный синтаксис.

Я пробовал следующее:

let dbs = Promise.all(async () => {
    await sqlite3.open("./db1.sqlite", { Promise }),
    await sqlite3.open("./db2.sqlite", { Promise })
    }
)

let [db_in, db_out] = dbs

, что не удается с:

evalmachine.<anonymous>:16
let [db_in, db_out] = dbs
                                      ^

TypeError: dbs is not iterable

И

async function init_dbs() {
  const [db_in, db_out, abstract_queue] = await Promise.all([
    sqlite3.open("./db1.sqlite", { Promise }),
    sqlite3.open("./db2.sqlite", { Promise })
  ]);
    let result = await [db_in,db_out]
}


const [db_in, db_out] = init_dbs().then(() => [db_in, db_out])

, который возвращает

evalmachine.<anonymous>:44
const [db_in, db_out] = init_dbs().then(() => [db_in, db_out])
                                                   ^
TypeError: init_dbs(...).then is not a function or its return value is not iterable

Какой синтаксис для этого подходит?

1 Ответ

0 голосов
/ 14 мая 2019

При использовании Promise.all он принимает массив обещаний, а не обратный вызов. Затем он возвращает обещание разрешенных массивов, которое вы затем можете использовать.

let db_in, db_out

async function init_dbs() {
  return await Promise.all([
    sqlite3.open("./db1.sqlite", { Promise }),
    sqlite3.open("./db2.sqlite", { Promise })
  ])
}

init_dbs().then(dbs => { 
  [db_in, db_out] = dbs
  // The databases have been initialized, start the application
  start_application()
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...