Front-end Developer w TT Lublin, Roche EnterpriseMobileApps, fanatyk Vima, Quake'a i długich dystansów
pozwalają imitować/emulować synchroniczność w asynchronicznym środowisku JavaScript.
See the Pen Pwzbqe by Jakub Miziołek (@jmiziolek) on CodePen.
Promise reprezentuje wynik operacji. Może znajdować się w jednym z 3 stanów:
Promise może zostać spełniony tylko raz. Raz spełniony/odrzucony promise nie może zmienić swojego stanu.
Do spełnienia lub odrzucenia promise'a możemy przypiąć dowolną ilość funkcji obsługi
Wynikiem jest zawsze pojedyńcza wartość. Wynik w przypadku odrzucenia nazywamy przyczyną
//defer, deferred, d, dfd...
var defer = $q.defer();
if(czy){
defer.resolve("obiad");
} else {
defer.reject("głód i halucynajce");
}
return defer.promise;
promise.then(ok, err);
//kazda z funkcji dostaje jeden argument jako wynik
var fs = require('fs');
function readJSON(filename, callback, errorcallback){
fs.readFile(filename, function (err, res){
if (err) return errorcallback(err);
callback(res, function(){
//i głębiej i głębiej i głębiej
});
});
}
readJSON('d.json', JSON.parse, console.error);
var fs = require('q-io/fs');
fs.read('d.json').then(JSON.parse, console.error);
var q = require('q');
var readFile = q.denodeify(require('fs').readFile);
readFile('d.json').then(JSON.parse, console.error);
$http.get("nic")
.then($http.post('dev/null'))
.then(console.log, console.error);
funkcja obsługi odrzucenia zawsze na samym dole łańcucha!
x.then(dobraFoo)
.then(rzucBledem)
.then(dobraFoo)
.then(null, console.error);
.done()
, która przechwytuje wyjątki w przypadku braku obsługi odrzucenia
x.then(dobraFoo)
.then(rzucBledem)
.then(dobraFoo)
.done();
getPralnie().then(function(pralnie){
$scope.pralnie = pralnie;
//zagnieżdżony promis
$http.get('pralnia' + result._id).then(pierz);
});
getPralnie.then(function(pralnie){
$scope.pralnie = pralnie;
//rezultat zostanie przekazany do funkcji pierz
return $http.get('pralnia' + result._id);
}).then(pierz);
$q.when("zjadłem ostropest");
tworzy promise rozwiązany przekazaną wartością
$q.reject("nie ma ostropestu");
tworzy promise odrzucony przekazaną wartością
kill it with fire!
$q($.ajax({/* ... */}));
$http.get('janusz').then(sprawdzJanusza)
.then(rozbierzJanusza)
.then(utylizujKoszuleJanusza)
.then(sprzatajOkruszki)
$http.get("posty");
$http.get("komenty");
$http.get("reklamy");
$q.all([
$http.get("posty"),
$http.get("komenty"),
$http.get("reklamy"),
]).then(results){
//resutls = [posty, komenty, reklamy]
};
$q.all([
$http.get("posty"),
$http.get("komenty"),
$http.get("reklamy"),
]).spread(function(posty, komenty, reklamy){
//argumenty rozdzielone wymaga $q-spread
});
$q.all([
$http.get("posty"),
$http.get("komenty").then(usunSpam),
$http.get("reklamy"),
]).spread(function(posty, komentyPrzetworzone, reklamy){
//argumenty rozdzielone
});
console.log(1);
$q.when(3).then(console.log);
console.log(2);
//1,2,3
$http.get("/users").then(zniszczIch)
.then(ukryjZwłoki)
.then(null, uciekajPrzedPolicją);
});
//ngRoute albo ui-router
$stateProvider.state('login', {
url: '/login',
templateUrl: 'views/login.html',
controller: 'LoginController',
}).state('index', {
url: '/index',
templateUrl: 'views/main.html',
controller: 'MainController',
resolve: {
lista: function(lista){
return lista.get();
}
},
});
See the Pen Pwzbqe by Jakub Miziołek (@jmiziolek) on CodePen.
function processMartix(data){
var output = [],
deferred = $q.defer(),
percentComplete = 0;
for(var i = 0; i < data.length; i++){
output.push(processDataItem(data[i]));
percentComplete = (i+1)/data.length * 100;
deferred.notify(percent);
}
deferred.resolve(output);
return deferred.promise;
};
processMartix(data)
.then(function(result){
// success
}, function(error){
// error
}, function(percent){
$scope.progress = percent;
});
gulp.task('angularcache', function(){
//make templateCache
return gulp.src('./frontend/build/views/*.html')
.pipe(templateCache("templates.js", {module: "ttApp", root: "views/"}))
.pipe(gulp.dest('frontend/app/scripts/'));
});
//wynik
angular.module("ttApp").run(["$templateCache", function($templateCache) {
$templateCache.put("views/przyklad.html"," html ");
};
Jakieś pytania?