Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript异步/等待不返回,更像是永远等待_Javascript - Fatal编程技术网

Javascript异步/等待不返回,更像是永远等待

Javascript异步/等待不返回,更像是永远等待,javascript,Javascript,我基于express启动了一个节点环境,我的问题更多的是Promise。 我已经编写了一个具有http调用(axios)的模块,我正在使用async/await来接收响应并处理它,模块中的所有内容在流方面都工作得很好,我能够执行console.log()s,但我返回的值没有返回到index.js index.js 很好用,我的readFile()函数也很好用 const getDistance = require('./actions/getDistance'); app.post('/

我基于express启动了一个节点环境,我的问题更多的是
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();