在我的节点应用程序中,我必须逐个执行2个查询(即)我必须根据第一个查询的结果执行第二个查询。
我的代码:
var levels;
try {
sequelize.query("Select * from levels where country_id = " + level0 + "").success(function(results) {
levels = results;
}).failure(function(err) {
if (err) {
logger.error(err.stack);
throw (err);
}
else {
if (callback) {
callback(err, null);
}
}
});
}
catch (err) {
}
if (level == 2) {
query = "select *from xxxxxx where " + query + " and leveltype = "+levels[0].name_2+"";-----------------------------------------------------------> this is from 1st query
try {
sequelize.query(query).success(function(results) {
results = tsv.stringify(results);
onSuccess(results, callback)
}).failure(function(err) {
if (err) {
logger.error(err.stack);
throw (err);
}
else {
if (callback) {
callback(err, null);
}
}
});
}
catch (err) {
logger.error(err.stack)
}
}
请帮我解决这个问题。提前谢谢。
答案 0 :(得分:3)
Sequelize使用Bluebird承诺:
sequelize.query("Select * from levels where country_id = " + level0 + "").success(function(results) {
levels = results;
}).failure(function(err) {
if (err) {
logger.error(err.stack);
throw (err);
}
else {
if (callback) {
callback(err, null);
}
}
});
}
可以变成:
sequelize.query("Select * from levels where country_id = " + level0 + "")
.then(function(results) {
levels = results;
});
承诺链:
sequelize.query("Select * from levels where country_id = " + level0 + "")
.then(function(levels) {
var query = "select *from xxxxxx where " + query +
" and leveltype = "+levels[0].name_2+""
return sequelize.query(query);
}).nodeify(callback); // turn back from promise API to callback API
此代码基本上完成了上述代码所做的一切:)
.then
处理程序)你可以做得更好,你可以返回promise的值(即 - return sequelize.query
)并完全切换到promise API。