Javascript can';t从wait/async函数获取数据

Javascript can';t从wait/async函数获取数据,javascript,node.js,api,async-await,gtmetrix,Javascript,Node.js,Api,Async Await,Gtmetrix,我正在用nodejs试用gtmetriks api。 我有一个index.js文件,处理传入的请求, 然后我有一个gtmetriks.js文件向api发出请求 问题是,我不知道如何配置它,只有在gtmetriks.js完成请求并获取数据之后,才能在index.js中获取数据 index.js: const gtmetriks = require('../gtmetrix/gtmetrix'); router.get('/api/gtmetriks', (req, res) => {

我正在用nodejs试用gtmetriks api。 我有一个index.js文件,处理传入的请求, 然后我有一个gtmetriks.js文件向api发出请求

问题是,我不知道如何配置它,只有在gtmetriks.js完成请求并获取数据之后,才能在index.js中获取数据

index.js:

const gtmetriks = require('../gtmetrix/gtmetrix');

router.get('/api/gtmetriks', (req, res) => {
        const result = gtmetriks()
        console.log(result);  
        res.send(result);    
    })
gtmetrriks.js:

const api = async () => {
console.log('starting');

// Run test from London with Google Chrome
const testDetails = {
    url: 'http://google.com/',
    location: 2,
    browser: 3
};
const test = await gtmetrix.test.create(testDetails);
console.log('test: ', test);

const data = await gtmetrix.test.get(test.test_id, 5000);
console.log('data: ', data);

return data    
}

module.exports = api;
浏览器中的结果为{}。 我假设这是'result'的值,因为这是它初始化时得到的值


我该怎么办?

您的
api
函数是
async
,因此返回一个
承诺,您需要在路由处理程序中等待:)

试一试


正如我所看到的,您将constapi声明为一个
async
函数,因此当您调用任何
async
函数时,请在该函数前面写入
wait
。所以它将等待函数解决所有承诺并得到结果

router.get('/api/gtmetriks', async (req, res) => {
    const result = await gtmetriks()
    console.log(result);  
    res.send(result);    
})
router.get('/api/gtmetriks', async (req, res) => {
    const result = await gtmetriks()
    console.log(result);  
    res.send(result);    
})