无法从等待/异步功能获取数据

时间:2019-03-07 17:02:07

标签: 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) => {
        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;

浏览器中的结果为{}。 我认为这是“结果”的值,因为这是初始化时获得的值。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

您的api函数是async,因此返回了Promise,您需要在路由处理程序中等待它:)

尝试

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

答案 1 :(得分:2)

正如我所见,您将const api声明为async函数,因此,当您调用任何async函数时,请在该函数的前面写入await。因此它将等到函数解决所有诺言并获得结果。

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