无法从 await/async 函数获取数据
can't get data from await/async function
我正在尝试使用 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
,因此 returns 您需要在路由处理程序中等待 Promise
:)
尝试
router.get('/api/gtmetriks', async (req, res) => {
const result = await gtmetriks()
console.log(result);
res.send(result);
})
正如我所见,您将 const api 声明为 async
函数,因此当您调用任何 async
函数时,请在该函数前面写入 await
if。所以它会等到函数解决了所有的承诺并得到结果。
router.get('/api/gtmetriks', async (req, res) => {
const result = await gtmetriks()
console.log(result);
res.send(result);
})
我正在尝试使用 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
,因此 returns 您需要在路由处理程序中等待 Promise
:)
尝试
router.get('/api/gtmetriks', async (req, res) => {
const result = await gtmetriks()
console.log(result);
res.send(result);
})
正如我所见,您将 const api 声明为 async
函数,因此当您调用任何 async
函数时,请在该函数前面写入 await
if。所以它会等到函数解决了所有的承诺并得到结果。
router.get('/api/gtmetriks', async (req, res) => {
const result = await gtmetriks()
console.log(result);
res.send(result);
})