node / express中的async / await似乎不等待Promise解析

时间:2017-09-12 23:31:02

标签: node.js express promise async-await

我在express之外有一个简单的脚本来测试它,我的脚本按预期工作。但是,以下代码似乎不符合我的期望。

async function getTest(type, key) {
  var body = await tloader.pload(type, key)
  console.log(body)
  return body
}

router.get('/pages/test', function(req, res) {
  console.log("Running test...")
  var content = getTest('tplt', 'primary')
  console.log(content)
  res.send(content)
  console.log(content)
})

控制台记录:

Promise { <pending> }
Promise { <pending> }
<html>
  <head>
  </head>
  <body>
    <p>Hello World - I love you all! It works!</p>
  </body>
</html>

Promise仅在发送内容后解析(也以{} object

发送

对于它的价值,包含承诺的代码是:

var pload = function(type, tname) {
    return new Promise( function(resolve, reject) {
        var key = keybase + type + ":" + tname
        rcli.get(key, function(err, res) {
            if (err) {
                reject(err)
            } else {
                resolve(res)
            }
        })
    })
}

(而且,是的,我知道我没有尝试抓住承诺拒绝。)

1 个答案:

答案 0 :(得分:4)

您的async功能基本上是&#34;承诺&#34;。

router.get('/pages/test', function(req, res) {
  console.log("Running test...")
  getTest('tplt', 'primary').then(content => {
    console.log(content)
    res.send(content)
    console.log(content)
  });
})

或者你可能能够在快速回调中使用async / await,我不确定express会如何处理。

router.get('/pages/test', async function(req, res) {
  console.log("Running test...")
  const content = await getTest('tplt', 'primary');
  console.log(content)
  res.send(content)
  console.log(content)
})