Promisify Express response.render 方法

Promisify Express response.render method

我需要创建一个渲染方法来将 html 块构建成一个字符串。 它似乎有效,但我使用了臭名昭著的“新承诺”,我想知道我所做的是否正确:

async render(req, res) {
  const locals = await this.execute(req); // DB operation, retrieve context
  return new Promise((resolve, reject) => {
    try {
      return res.render('my-view', { ...locals, layout: null }, (err, html) => { 
        if (err) {
          return reject(err);
        }
        return resolve(html);
      });
    } catch (err) {
      return reject(err);
    }
  });
}

谢谢!

new Promise 构造函数隐式捕获来自执行程序回调的(同步)异常,因此不需要 try/catch。此外,return 值将被忽略。你会写

async render(req, res) {
  const locals = await this.execute(req); // DB operation, retrieve context
  return new Promise((resolve, reject) => {
    res.render('my-view', { ...locals, layout: null }, (err, html) => { 
      if (err) reject(err);
      else resolve(html);
    });
  });
}