我使用地理编码器与节点反向查找一些gps坐标。这是我使用的代码:
var geocoder = require('node-geocoder');
var geo = geocoder({provider: 'google'});
geo.reverse({lat: 53.409702, lon: -1.429981}, function(error, result) {
console.log(JSON.stringify(result[0].city)); //Always prints sheffield
console.log(result[0].city); //Always throws error
});
所以真的很奇怪,每当我尝试记录这个城市时,它都会给出错误:无法读取未定义的属性0。这与承诺有关,我在另一篇SO帖子中看到了这一点。我认为它具体到地理编码器。
无论如何,如果我首先将其字符串化,它将始终打印,在这种情况下,谢菲尔德。由于城市的类型是一个字符串,为什么会这样做?我很好用它但我很好奇为什么字符串字符串在没有
的情况下抛出错误时起作用答案 0 :(得分:0)
这并没有完全“回答”你的问题...但它可能有助于解决一些问题:
我修改了你的脚本如下:
var geocoder = require('node-geocoder');
var geo = geocoder({provider: 'google'});
var r = null;
geo.reverse({lat: 53.409702, lon: -1.429981}, function(error, result) {
r = result;
var r2 = result;
var r3 = {animal:"moose"};
console.log(JSON.stringify(result[0].city)); //Always prints sheffield
// console.log(result[0].city); //Always throws error
});
console.log("Done.");
我在调试器中运行并在console.log语句中设置断点(“set breakpoint”,第9行):
node inspect tmp.js
< Debugger listening on ws://127.0.0.1:9229/8bda9a9f-9735-4a5a-9cc2-9312e9ae2123
...
debug> list(10)
> 1 (function (exports, require, module, __filename, __dirname) { var geocoder = require('node-geocoder');
2
3 var geo = geocoder({provider: 'google'});
4 var r = null;
5 geo.reverse({lat: 53.409702, lon: -1.429981}, function(error, result) {
6 r = result;
7 var r2 = result;
8 var r3 = {animal:"moose"};
9 console.log(JSON.stringify(result[0].city)); //Always prints sheffield
10 // console.log(result[0].city); //Always throws error
11 });
debug> sb(9)
debug> c
< Done.
break in tmp.js:9
...
打印出“结果”的值:
debug> repl
Press Ctrl + C to leave debug repl
> r3
{ animal: 'moose' }
> result
[ Object, raw: Object ]
> result[0]
{ formattedAddress: '84 Holywell Heights, Sheffield, UK',
latitude: 53.4100017,
longitude: -1.4295795,
extra: Object,
administrativeLevels: Object,
... }
换句话说,“结果”是一个复杂的对象...而console.log()似乎“尽力而为”,打印出“无论它能做什么”
一个解决方案:
分析相关对象(使用“repl”调试器命令,Chrome开发者工具,无论如何)。
“裁缝”你的console.log。
例如:console.log(result[0].formattedAddress);
。