我是承诺的新手,我对这些有一些疑问。
我需要从url为我的node.js应用程序获取一个JSON文件(有天气的东西)所以我创建了一个getJSON()
函数,该函数使用“返回”文件的https模块const https = require('https');
:
function getJSON(url, resolve) {
https.get(url, function(res) {
let json = '';
res.on('data', function(chunk) { json += chunk; });
res.on('end', function() { resolve(JSON.parse(json)); });
}).on('error', function(err) { console.log(err); });
};
正如你所看到的那样,它实际上并没有返回值,而是解析了它,因为我正在用一个承诺来调用函数:
function weather() {
let json = new Promise(function(res) {getJSON('https://api.openweathermap.org/data/2.5/weather?APPID=APIKEY&q=City&units=metric', res);})
json.then(function(weatherJSON) {
// and here i can use the file
});
}
所以这可行,但我觉得它可能会更好,我可以优化吗?我甚至不应该使用承诺吗?
谢谢!
答案 0 :(得分:1)
如果我理解这个问题,你就会在你的方法中回复一个承诺。
function getJSON(url) {
return new Promise(function(resolve, reject) {
const req = https.get(url, res => {
let json = '';
res.on('data', function(chunk) { json += chunk; });
res.on('end', function() { resolve(JSON.parse(json)); });
});
req.on('error', function(err) { console.log(err); });
});
};
const weather = () => {
getJSON('yourURL')
.then((data) => console.log(data))
.catch((error) => console.error(error));
}