George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net Using and creating Promises and Web Workers.

Slides:



Advertisements
Similar presentations
Creating Vector Graphics in the Web Learning & Development Telerik Software Academy.
Advertisements

Redundant Array of Independent Disks Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Writing HTML made easier Telerik School Academy HTML, CSS and JavaScript.
JavaScript Development Tools
Inside Windows Boot Process Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Guidelines to Preparing and Delivering an Elevator Pitch Presentation Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training.
Two basic algorithms for path searching in a graph Telerik Algo Academy Graph Algorithms.
About the Course Telerik Software Academy CSS Styling.
Binary, Decimal and Hexadecimal Numbers Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Eclipse + Android SDK, VS + Windows Phone SDK Telerik Software Academy Hybrid Mobile Applications.
Welcome to the JSON-stores world Learning & Development Telerik Software Academy.
Course Content, Evaluation, Exams Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Eclipse + Android SDK, VS + Windows Phone SDK Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Twitter Bootstrap Telerik Software Academy
Things you need to know George Georgiev Technical Trainer GeorgeAtanasov George Atanasov Front-End Developer.
Hamiltonian Cycle Penka Borukova Student at Telerik Academy.
Group Policy Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Reverse polish notation, Operations with big numbers Ivelin Rachev Telerik Corporation “Baba Tonka” High School of Mathematics.
April, Sofia, Telerik Software Academy Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Telerik Software Academy ASP.NET MVC.
Sales Processes, Sales Cycle and the Sales Force Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System Analyst Telerik.
Design Patterns that ease the design by identifying a simple way to realize relationships between entities. Antony Jekov Telerik Software Academy academy.telerik.com.
Using KendoUI for SPA Applications Learning & Development Telerik School Academy.
The way to create cross-platform apps Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
PEST Analysis, Porter’s 5 Forces and Sustainability Strategies Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System.
Searching for a Job, Writing CV and Cover Letter, Passing a Job Interview Telerik Academy for Software Engineers October 6 th 2012 – Sofia academy.telerik.com.
Drive Partitioning Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Telerik Software Academy Mobile apps for iPhone & iPad.
Google APIs and Facebook API Ivaylo Kenov Penka Borukova Telerik Corporation Telerik Academy Students.
The magic of virtual machines Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Web development with ExpressJS Learning & Development Telerik School Academy.
What it is, and does it work Learning & Development Telerik School Academy.
Device APIs with Xamarin
Telerik Software Academy Mobile apps for iPhone & iPad.
Academy.telerik.com Class of , Fall 2013.
Telerik Software Academy Databases.
Google APIs and Facebook API Ivaylo Kenov Penka Borukova Telerik Corporation Telerik Academy Students.
Telerik Software Academy ASP.NET Web Forms.
What are WinJS and WinRT, Using the APIs in JavaScript George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net.
JavaScript Modules and Patterns Telerik Software Academy
The True power of dynamic web pages Learning & Development Team Telerik Software Academy.
Approximate string matching Evlogi Hristov Telerik Corporation Student at Telerik Academy.
Xamarin with SQLite Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
Ivaylo Kenov Telerik Software Academy Technical Assistant.
Developing "evil" JavaScript applications Learning & Development Telerik School Academy.
The PhoneGap History Doncho Minkov Telerik Software Academy Technical Trainer
Building Rock-Solid Software Svetlin Nakov Telerik Software Academy Manager Technical Training
Cultivating Professionals for Your Company The Success Story of Telerik Svetlin Nakov, PhD Manager Technical Training Telerik Corp.
Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
The way of the ViewModel and the Binding Learning & Development Telerik School Academy.
AJAX with ASP.NET MVC Telerik Software Academy
Nencho Nenchev Doroteya Agayna Telerik Software Academy Telerik Support Leads.
Installation, Sample Usage, Strings and OOP Telerik Software Academy Software Quality Assurance.
In JavaScript Learning & Development Telerik Software Academy.
Services in AngularJS Telerik Software Academy
Svetlin Nakov Telerik Software Academy Manager Technical Training
What is Roslyn and how can we use it? Telerik Academy Plus C# 6.0 and Roslyn Seminar.
Splitting JavaScript into Dependent Modules Learning & Development Telerik Software Academy.
Changing the default visualization of views in Xamarin.Forms Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
Telerik Software Academy HTML5.
What to expect from the new IDE Telerik Academy Plus Visual Studio 2015 and ASP.NET 5.
Hristian Hristov Telerik Corporation
I have to use math? I am out of here… Telerik School Academy Unity 2D Game Development.
Automating Windows Deployment Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Store Apps, Development Tools, App key features George Georgiev Telerik Corporation Technical Trainer itgeorge.net.
Server Roles and Features Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Binary, Decimal and Hexadecimal Numbers Telerik Software Academy C# Fundamentals – Part 2.
Nikolay Kostov Telerik Software Academy academy.telerik.com Team Lead, Senior Developer and Trainer
Adding UI and Audio element Telerik Academy Plus Unity 2D Game Development.
Dimo Dimov Support Lead, Kendo UI Telerik Telerik Software Academy
Presentation transcript:

George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net Using and creating Promises and Web Workers

 Asynchronous programming in JavaScript  WinJS Promise  Promises explained  Using Promises  Creating Promise objects  Chaining promises  Promise error handling  Web Workers in Store Apps  Overview, Using web workers in Store Apps 2

How to do it

 JavaScript is single-threaded  Long-running operations block other operations  Asynchronous operations in Javascript  Delayed execution  Event handlers  Callbacks  Problems  Heavily-nested callbacks are hard to read  Exceptions may not propagate up 4

The evolution of Callback-oriented programming

 A promise is an object which represents an eventual (future) value  Methods "promise" they will return a value  Correct or representing an error  A Promises can be in one of three states:  Fulfilled (resolved, succeded)  Rejected (an error happened)  Pending (unfulfilled yet, still being computed) 6

 Promise objects can be used in code as if their value is known  Actually we attach code which executes  When the promise is fulfilled  When the promise is rejected  When the promise reports progress (optionally)  Promises are a pattern  No defined implementation, but strict requirements  Initially described in CommonJS Promises/A CommonJS Promises/ACommonJS Promises/A 7

 More specifically:  Each promise has a.then() method accepting 3 parameters:  Success, Error and Progress function  All parameters are optional  So we can write:  * Provided promiseMeSomething returns a promise 8 promiseMeSomething().then(function (value) { //handle success here }, function (reason) { //handle error here });

 Each.then() method returns a promise in turn  Meaning promises can be chained:  Promises enable us to:  Remove the callback functions from the parameters and attach them to the "result"  Make a sequence of operations happen  Catch errors when we can process them 9 asyncComputeTheAnswerToEverything().then(addTwo).then(printResult, onError);

 WinJS has an implementation of Promises/A  WinJS.Promise object  Computes a value at some time in the future  Can attach procedures to call in future with Promise.then() and Promise.done()  When computation was successful  When there was an error  When a progress update is available  All exposed WinRT asynchronous operations are wrapped in Promises 10

Live Demo 11

 Creating a Promise  “constructor” function  Receives 3 parameters – oncomplete, onerror, onprogress  Contains the code that computes the promise value  Should call oncomplete, onerror, onprogress in the respective situations  “oncancel” function  Code to execute if the promise was cancelled 12

Live Demo 13

 In web, we often have callback-based async operations  Executed by the browser  When done, browser calls the function we gave it  WinRT APIs are generally promise-based  Some important functionality in HTML5 is still callback-based  Such callback-oriented APIs are easy to wrap in promises 14

Live Demo 15

 Sometimes we need a promise from a normal value  So the code is consistent  Because we are not sure if the value is a promise or value  WinJS supports a WinJS.Promise.as function  If an object is a promise, just returns it  Else, wraps it in a promise  In the success state, i.e. calls the success handler with the object as a parameter 16

Live Demo 17

 Chaining promises  Promise.then() returns a Promise  Uses the return value of the previous promise  Can attach another.then() or.done() to it  Promise.done() returns undefined  Throws exception if the Promise is in the error state and there is no error handler  Good practice – use as end of Promise chain  Easier to read than nested callbacks 18

Live Demo 19

 Error handling  Errors are sent to the chain of.then()s or.done()s  When the chain has a.then()  If there is an onerror, it is called  Else, a promise in the error state is returned  When the chain has a.done()  If there is an onerror, it is called  Else, an exception is thrown 20

Live Demo 21

Achieving actual asynchrony

 A Web Worker is just JS code  Run in a separate thread by the browser/system  Does not share resources with the main thread  Communication done through messages  postMessage function, onMessage event  Two types  Dedicated –used only by main thread  Shared – can "talk" with other workers  WinRT supports dedicated workers  Good for long-running operations 23

Live Demo 24

форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране Do you haz them?

1. Implement a PrimeNumbersCalculator class  Which has methods to:  Calculate the prime numbers up to a given number N  Calculate the first N prime numbers by given N  Calculate the prime numbers in the range [A,B], where A and B are given  All the methods should be truly asynchronous  The calculations should be executed in web workers  The methods should return promises  The PrimeNumbersCalculator should keep exactly 3 web workers  Should be able to handle up to 3 requests at the same time  If there is a request and no worker can handle it, the promise returned from the corresponding method should be in the error state

2. Implement a UI for the PrimeNumbersCalculator  It should provide fields for number input  It should provide buttons to trigger calculations  It should display results of calculations  It should display errors information to the user  E.g. "You can only have up to 3 running calculations at a time"  The UI should always be responsive, by using the promises from the calculator 27