【问题标题】:can't get data from await/async function无法从等待/异步函数获取数据
【发布时间】:2019-07-29 15:51:06
【问题描述】:

我正在尝试使用 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);    
    })

gtmetriks.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;

浏览器中的结果是 {}。 我假设这是“结果”的值,因为这是它在初始化时得到的值。

我该怎么办?

【问题讨论】:

    标签: javascript node.js api async-await gtmetrix


    【解决方案1】:

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

    试试

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-07-06
        • 2019-07-01
        • 2017-10-24
        • 2020-10-03
        • 2019-08-07
        • 2023-03-13
        • 1970-01-01
        • 2017-04-06
        相关资源
        最近更新 更多