如果nodejs中连续查两次数据库,如果要求先查每1个,再查第2个,最后根据两次查询的结果做一些操作,怎么用promise实现呢?可以做到没有任何的二重嵌套吗?比如:
query({id:12}).then(function(data){
console.log(data);
query({id:13}).then(function(data2){
doXXX();
});
});
以上代码结果还是出现了嵌套。
如果这样写:
query({id:12}).then(function(data){
console.log(data);
}).then(function(){
query({id:13}).then(function(data2){
doXXX();
});
}).then(function(data){
doXXXX();
});
由于第2个then有异步,还是不行的,会跑到第3个then里面去。
谢谢解答,下面代码是可以的:
var query=test.query('core_user',{userName:'lqq'});
var array=new Array();
query.then(function (data) {
console.log(data);
array.push(data[0]);
}).then(function () {
return test.query('core_user',{userName:'test3'});
}).then(function (data) {
console.log(data);
array.push(data[0]);
console.log(array);
res.send(array);
});
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
Promise.all
这样OK?
如果两个Promise需要前后关系的话,用上述代码,把第二个Promise return出来;
如果没有,如LS所说,用Promise.all。
Promise.all
http://liubin.org/promises-book/#ch2-promise-all
可以参考一下 Promise迷你书
Promise是一种状态,之所以可以脱离callback hell的原因是如果在Promise的回调中return了另外一个Promise, 下个回调会等待上个Promise的状态变为reject或resolve.
就避免了无限深入的回调