我在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)
}
})
})
}
(而且,是的,我知道我没有尝试抓住承诺拒绝。)
答案 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)
})