Javascript异步/等待不返回,更像是永远等待
我基于express启动了一个节点环境,我的问题更多的是Javascript异步/等待不返回,更像是永远等待,javascript,Javascript,我基于express启动了一个节点环境,我的问题更多的是Promise。 我已经编写了一个具有http调用(axios)的模块,我正在使用async/await来接收响应并处理它,模块中的所有内容在流方面都工作得很好,我能够执行console.log()s,但我返回的值没有返回到index.js index.js 很好用,我的readFile()函数也很好用 const getDistance = require('./actions/getDistance'); app.post('/
Promise
。
我已经编写了一个具有http调用(axios)的模块,我正在使用async/await来接收响应并处理它,模块中的所有内容在流方面都工作得很好,我能够执行console.log()
s,但我返回的值没有返回到index.js
index.js
很好用,我的readFile()
函数也很好用
const getDistance = require('./actions/getDistance');
app.post('/find-closest', async (req, res) =>{
try{
let address = req.body.address;
let data = await readFile('src/agents.json');
return res.json(getDistance(JSON.parse(data),address));
} catch (e) {
console.log('Error');
console.log(e);
return res.json(e);
}
});
getDistance.js
module.exports=函数(代理、来源){
让destinations='&destinations='+agents.map(agent=>agent.address).join('|');
const getdistance=async()=>{
试一试{
return wait axios.get(url+origins+destinations+apiKey)
}捕获(错误){
控制台错误(错误)
}
};
const setDistancesResponse=async()=>{
常量距离=等待getDistances()
console.log('test',distance.data);//导出的getDistance
函数不会返回任何内容。您可能正在查找
module.exports = async function(agents, origins) {
const destinations = '&destinations=' + agents.map(agent => agent.address).join('|');
const distances = await axios.get(url + origins + destinations + apiKey)
console.log('test',distances.data); // this logs something
return 'baboom';
};
如果这现在返回一个承诺,则必须等待结果值:
app.post('/find-closest', async (req, res) =>{
try{
let address = req.body.address;
let data = await readFile('src/agents.json');
return res.json(await getDistance(JSON.parse(data), address));
// ^^^^^
} catch (e) {
console.error('Error', e);
return res.json(e);
}
});
我认为您错过了返回值。请尝试以下操作:
return setDistancesResponse();
您是否已检查网络选项卡以确保已成功发出请求?是的,我得到的是200顶级函数没有返回任何内容。您的意思是返回setDistancesResponse()
?您如何知道setDistancesResponse()当您不返回或保存setDistancesResponse()的结果时,
不会返回'baboom';
?我希望像return setDistancesResponse();
或const response=wait setDistancesResponse();return response;
。不要使用return wait axios.get(url+origins+destinations+apike+apike)
-而是在变量赋值中等待承诺。例如,let response=wait axios.get(url+origins+destinations+apiKey);return response;
至少现在我收到了一个空对象,但不是setDistancesResponse()末尾的字符串。
hotdim,谢谢Bergi。
return setDistancesResponse();