使用回调Javascript通过多种功能获取多个数据

时间:2018-10-14 20:43:43

标签: javascript node.js express asynchronous callback

我想要具有回调的多个函数,并且此函数将返回DB的数据。一个例子:

getStates: function (callback) {
        try {
            dbExecution.executeQuery("SELECT * FROM Table",
                function (err) {
                    console.log(err);
                }, function (rowCount, more, rows) {
                    if (rowCount > 0) {
                        callback(rows);
                    } else {
                        callback(null);
                    }
                });
        } catch (ex) {
            console.log(ex);
            callback(null);
        }
    }

但是这个功能仅仅是一个,我有五个功能相同,但是得到不同的数据。 “主要”功能:

router.get('/content', sessionChecker, function (req, res) {
    Module.getStates(function (data) {
        res.render('info-user', { states: data });
    });
    Module.getReligion(function (data) {
        res.render('info-user', { religions: data });
    });
});

如何在不嵌套函数的情况下使用异步Java脚本调用5个函数(州,城市,宗教等)?

1 个答案:

答案 0 :(得分:2)

更改每个get*方法以返回Promise(而不是使用回调),然后可以在这些Promise.all的数组上使用Promises。阵列中的所有Promise.all都解析后,Promises就会解析-然后,您可以res.render

getStates: () => new Promise((resolve, reject) => {
  dbExecution.executeQuery("SELECT * FROM Table",
    reject,
    function(rowCount, more, rows) {
      // if rowCount is 0, do you want to reject?
      // if (rowCount === 0) reject();
      resolve(rows);
    }
  )
})

然后,一旦所有功能都像上面一样:

router.get('/content', sessionChecker, function (req, res) {
  Promise.all([
    Module.getStates(),
    Module.getReligion(),
  ]).then(([states, religions]) => {
    res.render('info-user', { states, religions });
  })
  .catch((err) => {
    // handle errors
  });
});