Node.js使用util类功能等待异步

时间:2019-11-23 07:36:32

标签: node.js async-await

我对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] 
}

3 个答案:

答案 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关键字做出的承诺。