promises, and such

This commit is contained in:
Tyrel Souza 2017-11-21 10:11:35 -05:00
parent 055eb9358a
commit 079d0e738e
7 changed files with 155 additions and 1 deletions

47
app-promise.js Normal file
View File

@ -0,0 +1,47 @@
const yargs = require('yargs');
const axios = require('axios');
const credentials = require("./credentials")
const argv = yargs
.options({
a: {
demand: true,
alias: 'address',
describe: "Address to fetch weather for.",
string: true
}
})
.help()
.alias('help', 'h')
.argv;
var encodedAddress = encodeURIComponent(argv.address);
var geocodeUrl = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodedAddress}&key=${credentials.GOOGLE_API_KEY}`;
axios.get(geocodeUrl).then((response) => {
if (response.data.status === "ZERO_RESULTS") {
throw new Error('Unable to find that Address.')
} else if (response.data.status === 'REQUEST_DENIED'){
throw new Error(`API Request Denied: ${response.data.error_message}`);
}
var lat = response.data.results[0].geometry.location.lat;
var lng = response.data.results[0].geometry.location.lng;
console.log(response.data.results[0].formatted_address);
var weatherUrl = `https://api.darksky.net/forecast/${API_KEY}/${lat},${lng}`;
return axios.get(weatherUrl);
}).then((response) => {
var temperature = response.data.currently.temperature;
var apparentTemperature = response.data.currently.apparentTemperature;
console.log(`It's currently: ${temperature}. It feels like ${apparentTemperature}`);
})
.catch((e) => {
if (e.code === 'ENOTFOUND') {
console.log("Unable to connect to API servers");
} else {
console.log(e.message);
}
})
console.log("Powered By https://darksky.net/poweredby/");

1
app.js
View File

@ -35,4 +35,3 @@ geocode.geocodeAddress(argv.address, (errorMessage, results) => {
console.log("Powered By https://darksky.net/poweredby/");
// ae8dd4c9c3a690289fd7cfe125f50e84

7
credentials.js Normal file
View File

@ -0,0 +1,7 @@
var GOOGLE_API_KEY = process.env.GOOGLE_API_KEY;
var DARKSKY_API_KEY = process.env.DARKSKY_API_KEY;
module.exports = {
GOOGLE_API_KEY,
DARKSKY_API_KEY
}

35
package-lock.json generated
View File

@ -45,6 +45,14 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
},
"axios": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.13.1.tgz",
"integrity": "sha1-Pmer/kMzvJ0tX+b70TtGlOr8jfg=",
"requires": {
"follow-redirects": "0.0.7"
}
},
"bcrypt-pbkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
@ -136,6 +144,14 @@
"assert-plus": "1.0.0"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@ -192,6 +208,15 @@
"pinkie-promise": "2.0.1"
}
},
"follow-redirects": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.7.tgz",
"integrity": "sha1-NLkLqyqRGqNHVx2pDyK9NuzYqRk=",
"requires": {
"debug": "2.6.9",
"stream-consume": "0.1.0"
}
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@ -381,6 +406,11 @@
"mime-db": "1.30.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@ -583,6 +613,11 @@
"tweetnacl": "0.14.5"
}
},
"stream-consume": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz",
"integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8="
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",

View File

@ -10,6 +10,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.13.1",
"request": "^2.83.0",
"yargs": "^4.8.1"
}

36
playground/promise.js Normal file
View File

@ -0,0 +1,36 @@
var asyncAdd = (a, b) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (typeof a === 'number' && typeof b === 'number'){
resolve(a + b);
} else {
reject("Arguments must be numbers");
}
}, 500);
})
}
//
//
// var somePromise = new Promise((resolve, reject) => {
// setTimeout(() => {
// // resolve("Hey, It worked!");
// reject("FAILED BRUH");
// }, 500);
// });
//
// somePromise.then((message) => {
// console.log("Success:", message);
// },
// (errorMessage) => {
// console.log("Error:", errorMessage);
// })
asyncAdd(1, 2).then((res) => {
return asyncAdd(res, 33);
}).then((res) => {
console.log("Should be 36", res);
}).catch((errorMessage) => {
console.log(errorMessage);
})

29
playground/promise2.js Normal file
View File

@ -0,0 +1,29 @@
const request = require('request')
var geocodeAddress = (address) => {
return new Promise((resolve, reject) => {
var encodedAddress = encodeURIComponent(address);
request({
url: `https://maps.googleapis.com/maps/api/geocode/json?address=${encodedAddress}`,
json: true
}, (error, response, body) => {
if (error) {
reject("Unable to connect to Google Servers.");
} else if (body.status === "ZERO_RESULTS"){
reject("Unable to find that Address.");
} else if (body.status === "OK"){
resolve({
address: body.results[0].formatted_address,
latitude: body.results[0].geometry.location.lat,
longitude: body.results[0].geometry.location.lng
});
}
});
})
};
geocodeAddress(19146).then((location) => {
console.log(JSON.stringify(location, null, 2));
}, (errorMessage) => {
console.log(errorMessage);
})