Node.js 关于NodeJS中的嵌套承诺

Node.js 关于NodeJS中的嵌套承诺,node.js,Node.js,有许多线程在这个和使用,我试图找到以下问题的解决方案 getMethod() { execDBQuery(sqlQuery1) .then(productionQueryRows => { prodResultFunc(resultSet) // Calling a function to get another set of DB values .then (result) { console.log(result) // Final result

有许多线程在这个和使用,我试图找到以下问题的解决方案

getMethod() {
  execDBQuery(sqlQuery1)
  .then(productionQueryRows => {
     prodResultFunc(resultSet) // Calling a function to get another set of DB values
     .then (result) {
      console.log(result) // Final result which will be sent to user
     }
  });
}

async function prodResultFunc(prodRowSet) {
 const results = await Promise.all(
    prodRowSet.map( async (objBatchRow) => {

        execDBQuery(sqlQuery2)
        .then(resultSet => {
            read value-1
        })

        execDBQuery(sqlQuery3)
        .then(resultSet => {
            read value-2
        })      

        // Create a object using Value-1 & Value-2 and return object to map
    });
  );
}
我尝试了下面的实现(只执行了一次SQL),效果很好

async function prodResultFunc(prodRowSet) {
 const results = await Promise.all(
    prodRowSet.map( async (objBatchRow) => {

        execDBQuery(sqlQuery2)
        .then(resultSet => {
            read values using resultSet
            Create object with resultSet values
        })
        return object
    });
  );
}

但我希望在创建对象时同时使用SQLs(2和3)的值,在这里我很难找到实现的语法。任何指向现有线程的帮助/指针都将非常有用。

您可能正在寻找


每当您处理复杂的承诺链时,我发现async/await语法更容易阅读。最终得到的嵌套代码要少得多

下面的示例显示了如何组合两个不同查询的结果:


const prodRowSet=[1,2,3];
//模拟查询功能。
异步函数execDBQuery(sql){
返回[{id:1,query:sql}];
}
异步函数prodResultFunc(prodRowSet){
const results=等待承诺。全部(
prodRowSet.map(异步(objBatchRow)=>{
让resultSet2=wait execDBQuery('sqlQuery2');
让resultSet3=wait execDBQuery('sqlQuery3');
//执行任何您想要合并结果集的操作。
设combinedObj={resultSet2,resultSet3}
返回组合对象;
})
);
返回结果;
}
(异步()=>{
让输出=等待prodResultFunc(prodRowSet);
日志(“输出:”,输出);

})();但是我的execDBQuery在执行SQL之后返回承诺…所以我想在执行SQL2和SQL3之后我将使用.then()…这就是挑战所在。wait关键字将不再需要使用.then()调用。。您可以使代码看起来更像同步代码。。所以它更容易阅读!是的,特里,它正在工作。我得到了预期的结果!。感谢您提供快速、干净的解决方案。太好了!我很高兴能帮上忙!
async function prodResultFunc(prodRowSet) {
 const results = await Promise.all(
    prodRowSet.map( async (objBatchRow) => {

          Promise.all([execDBQuery(sqlQuery2), execDBQuery(sqlQuery3)]).then(function(values) {
               //TODO:: Impement you business logic here
                console.log(values);
          });
    });
  );
}