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。
- 我如何链接与Q的嵌套承诺? 我无法让他们按照正确的顺序运行
- TypeError:无法设置未定义的属性'_bitField'(蓝鸟库)
- 在打字稿中,不能使promisifyAll Redis api与Bluebird
- 为什么这个JavaScript Promise拒绝()在结果callback处理?
- node.js pg-promise和来自API的分页
- 在node.js中的for循环之后完成多个writeFile函数完成时的promise
- Promise.all无效迭代抛出生成器
- 如何通过node.js中的本地promise来全局处理exception?
- mongoose.connection.collections.collection.drop()每隔一次都会抛出错误