【发布时间】:2019-11-18 09:06:02
【问题描述】:
我正在尝试使用异步函数和 Puppeteer 获取纬度和经度数据。
我希望看到我获取的纬度和经度值。但是,我收到以下错误。
节点.jsconst latLong = 等待 getLatLong(config);
^^^^^SyntaxError: await 仅在异步函数中有效
const getLatLong = require('./util/latLong');
const latLong = await getLatLong(config);
latLong.js
const getLatLong = async ( city, state, ) => {
...
const browser = await puppeteer.launch();
...
const page = await browser.newPage();
await page.goto( url, waitUntilLoad, );
await page.type( placeSelector, placeString, );
await page.click( runButtonSelector, waitUntilLoad, );
...
const results = await page.evaluate( ( lat, long, ) => {
const latitude = Promise.resolve(document.querySelector(lat).value);
const longitude = Promise.resolve(document.querySelector(long).value);
const out = { latitude, longitude, }
return out;
}, [ latitudeSelector, longitudeSelector, ] );
...
await browser.close();
return results;
}
const latLong = async ({ city, state, }) => {
const out = await getLatLong( city, state, );
return out;
};
module.exports.latLong = latLong;
我做错了什么?
【问题讨论】:
-
你需要在你调用
getLatLongasync的地方创建函数。 -
或者只在返回的承诺上使用
.then()。 -
@jfriend00:感谢您的评论。您的想法在代码中的表现如何?随时提供答案。您的想法很可能有助于扩展我对异步和承诺的理解。
-
@Mowzer - 使用
.then()似乎是你应该从有关承诺的基本教育材料中学到的东西。如果这真的是你不知道的事情,请查找并阅读一些关于使用 Promise 的教程,因为它也会以其他方式使你的编程受益。getLatLong(config).then(latLong => { console.log(latLong);}); -
@jfriend00:问题更多的是关于在哪里使用
then,而不是如何。因为有许多不同的可能性。谢谢。
标签: javascript node.js asynchronous require