我对Node.js相当陌生,我正尝试通过Koa.js框架来学习它。
即使值中有await,我仍在努力理解为什么为什么运行index.js-> console.log。
有人能指出我正确的方向吗?
index.js
router.get('getValue','/display',async (ctx) => {
var myUtilfunction = require('../util')
var result = await myUtilfunction.getData()
console.log(result)
}
util.js
async function getData(){
var customObject =[]
var standardObject =[]
conn.describeGlobal(function (err,res){
if (err){return console.error(err)}
console.log('No of Objects ' + res.sobjects.length)
res.sobjects.forEach(function(sobject){
if (sobject.custom){
customObject.push(sobject)
}else{
standardObject.push(sobject)
}
})
console.log("Done")
})
return [customObject, standardObject]
}
答案 0 :(得分:0)
尝试这个
等待,在异步函数中工作
router.get('getValue','/display', async (ctx) => {
var myUtilfunction = require('../util')
var result = await myUtilfunction.getData();
console.log(result)
});
function getData(){
return new Promise((resolve, reject) => {
resolve('result goes here');
});
}
答案 1 :(得分:-1)
您需要指定功能为异步,以等待工作。
类似这样的东西:
router.get('getValue','/display', async (ctx) => {
var myUtilfunction = require('../util')
var result = await myUtilfunction.getData()
console.log(result)
}
希望这会有所帮助:)
答案 2 :(得分:-1)
在您的函数getData()中,我认为您已经放错了return语句。 return语句应放在用于conn.describeGlobal()的回调函数中。
在实际编写getData()时,conn.describeGlobal()调用似乎是一种异步处理,因此放置在外部的return语句可能是在将某些内容推入数组之前执行的。
结果是您的路由器从getData()函数得到一个空响应,然后用一个空答案来解析await关键字做出的承诺。