【发布时间】:2016-09-06 05:41:45
【问题描述】:
在下面的代码中,我试图将第一个和第二个查询的结果放在一个名为 result 的全局变量中。问题是Promise.all() 没有等待查询完成,而是在处理then() 之前。
我该如何解决?
代码:
var result = {};
Promise.all([
connection.query('SELECT * FROM analysis',
function(err, rows, fields) {
if (err) throw err;
result.analysis = rows;
console.log("query 1");
}),
connection.query('SELECT * FROM analysis_description',
function(err, rows, fields) {
if (err) throw err;
result.analysis_description = rows;
console.log("query 2");
})
])
.then(function(result){
console.log(result);
console.log("result");
});
输出:
result
query 1
query 2
【问题讨论】:
-
connection.query是否返回承诺? -
Promise.all 接受一组承诺。这些看起来不像是承诺:-)
-
你需要“promisify”一个普通的异步回调函数来使用它作为一个promise:因为promise是一个必须立即返回的值。有几种方法可以实现这一点。
-
是的……其他人都这么说。看这里 - github.com/DrkSephy/es6-cheatsheet#promises
标签: javascript node.js callback promise bluebird