Pepper ja bym tak szybko nie skreslal node.js na twoim miejscu ani javascript.
Pamietaj ze asynchronicznosc jest stworzona i idealna do zapytan API. Jaka masz pewnosc ze wysylajac request HTTP Dostaniesz go od razu ? moze bedzie akurat jakis lag, cos co spowolni response, nie chcesz przeciez zeby caly twoj program czekal az wroca dane, w tym czasie mozesz wykonac inne operacje a w ostatecznosci jak przyjdzie response to sie wykona callback ktory go obsluguje
Ponizej jak mozna usprawnic callbacki
Callbacki moga zajechac czlowieka bo powstaje makaron (funkcja za funkcja i mozna sie pogubic)
na szczescie jest cos takiego jak Promisses, gdzie mozna callbacki zamknac w bardziej czytelny dla czlowieka sposob + obsluzyc sobie blad po kazdej funkcji
Cala idea Promiss jest taka ze bierze dwa argumenty resolve/reject(opcjonalny mozna uzyc catch) i wrzuca siebie w pending state, dopoki resolve nie zwroci rzadanej wartosci
albo reject nie wypluje bledu. Ta zwracana wartosc wykorzystujesz w kolejnych funkcjach. Dla przykladu na kolanie napisane Hello World, bo przyklady z sieci
sa malo zrozumiale zeby chwycic ideee imho.
Kod: Zaznacz cały
var greetings = new Promise(function(resolve) {
resolve("Hello in");
});
function hello(value){
let msg = "my world"
console.log(value+" my world")
return value+msg;
}
function calculate(value){
console.log("And length of my message:",value.length)
}
function helloError(err){
return console.log(err)
}
greetings
.then(hello)
.then(calculate)
.catch(helloError);
Tu fajnie opisane sa promisses
https://scotch.io/tutorials/javascript- ... or-dummies
A tu nowe promisses dodane do przegldarek fetch()
https://developers.google.com/web/updat ... n-to-fetch
ktory skroci twoj kod o 3/4 ;]
Przyklad: wzialem jakies api publiczne i
Kod: Zaznacz cały
mkdir moje-api
cd moje-api
npm init -y
npm install --save node-fetch
touch apitest.js
w pliku
var fetch = require('node-fetch');
var dataRecv = []
fetch('http://api.giphy.com/v1/gifs/trending?api_key=dc6zaTOxFJmzC')
.then(response => response.json())
.then(responseData=> {
//console.log(responseData.data)
Object.assign(dataRecv,responseData.data)
console.log(dataRecv)})
.catch(error => console.log("Data fetch failed"))
I robisz sobie z tym co chcesz w kolejnych .then albo po za bo dataRecv obiekt jest dostepny po za scope promisses. Nawet python i ruby ze swoimi requestami sie chowa
przy tym ;]
Oprocz fetch masz jeszcze axios, ktory ma middleware mozesz robic z response/request co chcesz zanim dane zostana odebrane lub wyslane
Mam nadzieje ze zachecilem cie do dalszej exploracji javascript