我正在回环api中创建一个端点,我想返回不同的查询结果。这就是我所做的:
Model.datosPrincipalesPorId = (id, res, cb) => {
parameterValidatorId(id, err => {
if (err) {
logErr(
'[ ' +
new Date().toString() +
' ] :' +
" --RESOURSE: '/api/establecimientos/ofertas/:id'" +
' --ERROR: ' +
JSON.stringify(err)
);
res.status(httpStatus.BAD_REQUEST.code).send(err);
}
});
const niveles = ['Inicial', 'Primario', 'Secundario'];
const conn = Model.app.datasources.db.connector;
let ofertas = [];
let sql;
niveles.forEach(nivel => {
let oferta = { nivel: nivel };
sql = sqlEstablecimiento.findIdiomas
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
console.log(stb);
oferta.idiomas = stb;
return oferta;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findModalidades
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.modalidades = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findTurnos
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.turnos = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findEspecializacionesIdioma
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.e_idiomas = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findIntensificacionesIdioma
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.i_idiomas = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findJornadas
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.jornadas = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findInformacionExtra
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.extra = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findReligiones
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.religiones = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findOrientaciones
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.orientaciones = stb;
})
.catch(err => cb(err, null));
sql = sqlEstablecimiento.findSuborientaciones
.replace('%1', id)
.replace('%2', nivel);
commons
.getResultSqlString(conn, sql)
.then(stb => {
oferta.suborientaciones = stb;
})
.catch(err => cb(err, null));
ofertas.push(oferta);
});
cb(null, ofertas);
};
在查询可以检索任何信息之前,似乎已执行了代码。每个查询都使用一个SQL字符串(正在运行),并调用此方法来执行它:
exports.getResultSqlString = (conn, sql, params) => {
return new Promise((resolve, reject) => {
conn.execute(sql.toString(), params, (err, result) => {
if (err) reject(err);
else resolve( result.map(item => { return {...item} }) );
});
});
};
我尝试不使用Promises来直接执行查询,但这不起作用:
conn.execute(sql.toString(), (err, result) => {
if (err) return(res.status(httpStatus.BAD_REQUEST.code).send(err););
else return( result.map(item => { return {...item} }) );
});
我不了解环回处理诺言的方式以及如何包含await运算符。