【发布时间】:2019-10-23 10:58:26
【问题描述】:
我有一个带有回调的函数,我的问题是函数的返回发生在回调广告之前,然后返回 null 而不是返回坐标数组
function callback(coordinates=[]){
console.log(coordinates);
return coordinates;
}
function getCoordinates(callback){
connection.connect();
let coordinates=[null];
connection.query('SELECT AreaId AS areaNumber, longitude AS longitude, latitude AS latitude FROM coordinates', function (error, results, fields) {
if (error) throw error;
let area=[];
for (result of results) {
if (!area.includes(result.areaNumber)){
area.push(result.areaNumber)
coordinates[result.areaNumber]=[];
}
coordinate=[result.longitude,result.latitude];
coordinates[result.areaNumber].push(coordinate);
}
coordinates=callback(coordinates)
});
connection.end();
return coordinates;
}
console.log(getCoordinates(callback));
我有:
[null] //对应console.log(getCoordinates(callback));
和
[array with value] //对应于函数vallback中的console.log(coordinates)
我的回调会被考虑怎么办?
抱歉,我是 node.js 的新手,所以我可能误解了回调。
我想要的是获得一个坐标数组,以后可以在我的代码中的 2 个不同位置使用,例如:
.get('/map', function(req, res) {
let Coords=getCoordinate(callback)
res.render('map.ejs', {token: tokenMapbox, coordinates: Coords});
})
.get('/wmap', function(req, res) {
let Coords=getCoordinate(callback)
res.render('wmap.ejs', {token: tokenMapbox, coordinates: Coords});
})
【问题讨论】:
-
忘记返回值。需要使用
coordinates的代码应该位于回调中。这可能会有所帮助:felix-kling.de/blog/2019/…,尤其是“误解 1:从回调中返回” -
“我想要的是获得一个坐标数组,以后可以在我的代码中的 2 个不同位置使用。” 取决于真正的“稍后”意思和什么两个地方。但通常将所有需要数据的代码放在回调中应该有问题。通过更完整的示例,我们可以为您提供更好的帮助。
标签: javascript mysql node.js callback