Как написать цепочку Promise? - PullRequest
       30

Как написать цепочку Promise?

0 голосов
/ 10 февраля 2020

Когда я пытаюсь выполнить поиск в базе данных, я нашел два вида кодов для этого. Но я не знаю, какой из них предпочтительнее и почему ..

// a.js
export default oracledb.createPool(configuration)

первый способ (кажется, работает хорошо, но не соответствует техническим требованиям):

// b.js
import main from a.js;
main.then((pool)=>{
    pool.getConnection().then((connection)=>{
        connection.execute(sql).then((result)=>{
           console.log(result);
           connection.close();
        }).catch(err=>{
           if(connection){connection.close()}
        })
    });
})

вот второй способ:

let connection;
main.then((pool)=>{
    return pool.getConnection()
}).then((connection)=>{
   return connection.execute(sql)
}).then((result)=>{
   console.log(result);
   connection.close();
}).catch(err=>{
   if (connection){connection.close()}
});

Эта проблема может быть связана не только с работой базы данных, но и с правильный способ организовать цепочку обещаний. Может кто-нибудь помочь мне?

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

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

let connection

main
.then(pool => pool.getConnection())
.then(connection => connection.execute(sql))
.then(result => {
   console.log(result)
   connection.close()
})
.catch(err => {
   if (connection) connection.close()
})
1 голос
/ 10 февраля 2020

Используйте эту документацию https://oracle.github.io/node-oracledb/doc/api.html

const mypw = ...  // set mypw to the hr schema password

async function run() {

  let connection;

  try {
    connection = await oracledb.getConnection(  {
      user          : "hr",
      password      : mypw,
      connectString : "localhost/XEPDB1"
    });

    const result = await connection.execute(
      `SELECT manager_id, department_id, department_name
       FROM departments
       WHERE manager_id = :id`,
      [103],  // bind value for :id
    );
    console.log(result.rows);

  } catch (err) {
    console.error(err);
  } finally {
    if (connection) {
      try {
        await connection.close();
      } catch (err) {
        console.error(err);
      }
    }
  }
}

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