給定代碼如果條件不存盤新名稱并首先運行回呼,則如何處理內部異步呼叫
var xyz = function (data, callback) {
try{
pool.query('select * from devices',[1],function(err,result){
if(result.rows[0].name = 12){
pool.query('select * from devices',[12],function(err,result){
result.rows[0].name = result.rows[0].newname;
}
}
callback(result.rows[0].name);
});
}catch(err){
callback(err);
}
}
uj5u.com熱心網友回復:
由于您標記了 async-await,因此您需要使用Promise's
所以
像這樣創建一個輔助函式
const promiseQuery = (pool, ...args) => new Promise((resolve, reject) => {
pool.query(...args, (err, result) => {
if (err) return reject(err);
resolve(result);
});
});
然后像這樣使用它
var xyz = async function (data, callback) {
try {
const result = await promiseQuery(pool,'select * from devices', [1]);
if (result.rows[0].name = 12) {
const result = await promiseQuery(pool, 'select * from devices', [12]);
result.rows[0].name = result.rows[0].newname;
callback(result.rows[0].name);
}
} catch (err) {
callback(err);
}
}
當然,一些 db 已經有他們的功能的承諾版本
所以它會像
var xyz = async function (data, callback) {
try {
const result = await pool.query('select * from devices', [1]);
if (result.rows[0].name = 12) {
const result = await pool.query('select * from devices', [12]);
result.rows[0].name = result.rows[0].newname;
callback(result.rows[0].name);
}
} catch (err) {
callback(err);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462290.html
標籤:javascript 节点.js 异步 异步等待
