新浪API返回的JSON
{
ret: 1,
start: -1,
end: -1,
country: '中国',
province: '上海',
city: '上海',
district: '',
isp: '',
type: '',
desc: ''
}
node代码
class IP {
constructor(){
this.name = 'IPAPI';
};
getIpInfo(ip, cb){
let options = {
host: 'int.dpool.sina.com.cn',
path: `/iplookup/iplookup.php?format=json&ip=${ip}`,
method: 'get'
};
http.request(options, (response) => {
var data = '';
response.on('data',(chunk) => {
data+= chunk;
}).on('end', function () {
data = JSON.parse(data);
data.ip = ip;
this.data = data;
cb(null,data);
}).on('error',function(){
cb(null, {status:'Error!'});
})
}).end();
}
}
这个JSON目前只能通过回调方式获取.
let ip = new IP();
ip.getIpInfo('180.157.199.109', (err,data) => {
console.log(data);
// data = JSON
});
我想改成
let ip = new IP();
console.log(ip.getIpInfo('180.157.199.109');)
//ip.getIpInfo = JSON;
这样!
你这是异步IO转同步IO
或者可以考虑做成形式上的同步IO,可以考虑用co.js或者pormise
@CoderIvan 朋友, 可以写个看看么!?
<div data-reactid=".0.1.0.5.2.0.0"><p data-reactid=".0.1.0.5.2.0.0.$0"><span data-reactid=".0.1.0.5.2.0.0.$0.0">不会promise或者generator你就回调嵌套吧</span></p></div>
@dlutwuwei 写了N次还没实现.
什么叫暴露json
这个我也用过 显示当前定位城市… $.getScript
@captainblue2013 目前只能通过
ip.getIpInfo('180.157.199.109', function(err,data) {
console.log(data);
// 这里的data输出的是新浪API的JSON
});
这个回调方式输出新浪API的JSON。
我想改成console.log(ip.getIpInfo('180.157.199.109
));`就能输出新浪API的JSON。
@liyunzhi1993 这个是在NODEJS中请求,不是在客户端。
用streamline和aync的飘过
@orbury 建议先了解一下什么是异步io,然后自然就明白怎么写了…
@qimenxiaozi 别飘啊!能不能帮我把这个问题解决。新人,求帮助。
请用php
你现在的代码是回调的形式,可以改成同步的形式。es6的新特性:generator,再配上co更好。 但是本质上还是异步的,只不过代码看上去像同步的而已。
@huangshaohui 我试试, 谢谢你的意见。
@lonso 楼主的意思是同步编码不用理会回调。然而这需要一定的处理,比如async,promise等,否则就使用callback吧
@DevinXian 我尝试着写写, 这也是学习的过程, 哎! 要是有个对照, 我觉得, 学的就快多了. 自己看文档, 还是有很多不明白.
@lonso 其实我也不明白这是什么形式.
@lonso 我也只能试试, 我也是才学到回调这块。