我在Node.js应用程序中运行了两个JS文件。
在latlng.js中,我有以下代码:
async function getPlaceDetails(input) {
var locationUrl = 'https://www.google.com';
request(locationUrl, (error, response, body) => {
if (!error && response.statusCode == 200) {
let location_json = JSON.parse(body);
let placeDetails = {
lat: location_json.candidates[0].geometry.location.lat,
lng: location_json.candidates[0].geometry.location.lng,
name: location_json.candidates[0].name,
}
return placeDetails;
}
else {
console.log("Error "+response.statusCode);
}
});
}
module.exports.getPlaceDetails = getPlaceDetails;
我正在从latlng.js中导出功能getPlaceDetails(),以便可以在app.js中使用它,请参见此处:
var place = require('./latlng');
async function firstFunction(input){
let data = await place.getPlaceDetails(input);
return data;
};
async function secondFunction(input){
let data = await firstFunction(input);
// now wait for firstFunction to finish...
console.log(data);
};
secondFunction('museum of modern art');
这为我返回未定义。我今天一直在寻找几个小时,以获取除undefined或Promise {undefined}之外的其他东西,但没有成功...
答案 0 :(得分:0)
您的getPlaceDetails
函数是基于回调的,当您await
没有回调时,它不会立即返回有用的任何东西。相反,您可以“承诺”它以适应async/await
模式:
async function getPlaceDetails(input) {
return new Promise((resolve, reject) => {
var locationUrl = 'https://www.google.com';
request(locationUrl, (error, response, body) => {
if (!error && response.statusCode == 200) {
let location_json = JSON.parse(body);
let placeDetails = {
lat: location_json.candidates[0].geometry.location.lat,
lng: location_json.candidates[0].geometry.location.lng,
name: location_json.candidates[0].name,
}
resolve(placeDetails);
}
else {
console.log("Error "+response.statusCode);
reject(new Error('something meaningful here'));
}
});
});
}
module.exports.getPlaceDetails = getPlaceDetails;