渲染模板时链承诺

时间:2016-04-25 09:52:43

标签: javascript express handlebars.js es6-promise

获取数据的功能。

获取连接并获取一些数据。省略了一些代码。

function executeSQL(sql, bindParams , options) {
  return new Promise(function(resolve, reject) {
    ...
    resolve(result);
  });
}

使用该功能的控制器

exports.index = function(req, res){

    database.executeSQL('SELECT 1 FROM DUAL', [] , {})

    .then(function(result) {
      res.render('index' , { TITLE : 'Lorem Ipsum Blog' });
    })

    .catch(function(err) {
      next(err);
    });
};

我的index路径中使用了index控制器。

我需要至少调用我的executeSQL函数两次。只有在完成这两项操作后,我才能调用res.render并发送我提取的数据。

如何链接它们? 我甚至需要链接它们吗?我是否可以异步执行它们,一旦完成它们,我就会调用res.render

1 个答案:

答案 0 :(得分:1)

使用Promise.all Promise.all(iterable)方法返回一个promise,它在iterable参数中的所有promise都已解析时解析。

function executeSQL(sql, bindParams, options) {
  return new Promise(function(resolve, reject) {
    resolve(result);
  });
}
exports.index = function(req, res) {
  var pro1 = database.executeSQL('SELECT 1 FROM DUAL', [], {});
  var pro2 = database.executeSQL('SELECT 1 FROM DUAL', [], {});
  Promise.all([pro1, pro2]).then(function(result) {
    console.log(result); //result will be an array
    res.render('index', {
      TITLE: 'Lorem Ipsum Blog'
    });
  }).catch(function(err) {
    next(err);
  });
};