node.js + sequelize +顺序执行

在我的节点应用程序中,我必须执行2个查询1之后(即)我必须执行基于第一个查询结果的第二个查询。

我的代码:

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) } } 

请帮我解决这个问题。 提前致谢。

Sequelize使用蓝鸟承诺:

 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 

而这个代码基本上做你的上面的代码的一切:)

  • 你不需要尝试/抓住,如果(err)检查承诺 – 他们照顾你。 如果你扔进一个承诺处理程序,你是安全的。
  • Promises链,如果你从promise返回一个promise的值,那么它会用这个promise来解决它(这意味着你可以添加一个.then处理程序)

你可以做得更好,但是你可以返回promise的值(也就是return sequelize.query )并完全切换到promise API。