Promise链怎么写?
How to write Promise chain?
当我尝试进行一些数据库搜索时,我发现了两种代码可以执行 this.But 我不知道哪个更喜欢以及为什么..
// a.js
export default oracledb.createPool(configuration)
第一种方式(貌似效果不错,但不符合promise规格):
// 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()}
});
这个问题可能不只是关于数据库操作,而是组织承诺的正确方法chain.Can有人帮我吗?
使用此文档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();
使用 promises 的一个主要想法是避免回调地狱,但是你写的第一段代码也可能成为级联地狱。第二种结构更好,更易于阅读和调试:
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()
})
当我尝试进行一些数据库搜索时,我发现了两种代码可以执行 this.But 我不知道哪个更喜欢以及为什么..
// a.js
export default oracledb.createPool(configuration)
第一种方式(貌似效果不错,但不符合promise规格):
// 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()}
});
这个问题可能不只是关于数据库操作,而是组织承诺的正确方法chain.Can有人帮我吗?
使用此文档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();
使用 promises 的一个主要想法是避免回调地狱,但是你写的第一段代码也可能成为级联地狱。第二种结构更好,更易于阅读和调试:
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()
})