Advertisement
Guest User

promise example

a guest
Aug 30th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Q = require('q'),
  2.     https = require('https')
  3. ;
  4.  
  5. var getRates = function() {
  6.     var deferred = Q.defer(),
  7.         url = 'https://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.xchange+where+pair+=+%22USDRUB,EURRUB%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback='
  8.     ;
  9.  
  10.     https.get(url, function(res) {
  11.         // deferred.resolve();
  12.         var out = '';
  13.         res.setEncoding('utf8');
  14.         res.on('data', function(chunk){
  15.             out += chunk;
  16.         });
  17.         res.on('end', function() {
  18.             deferred.resolve(JSON.parse(out));
  19.         });
  20.     }).on('error', function(e) {
  21.         deferred.reject(e);
  22.     })
  23.  
  24.     //почему возвращаем deferred.promise а не deferred?
  25.     return deferred.promise;
  26. };
  27.  
  28. var someAsyncFunction = function(data) {
  29.     var deferred = Q.defer();
  30.  
  31.     setTimeout(function() {
  32.         deferred.resolve(data);
  33.     }, 1000);
  34.  
  35.     return deferred.promise;
  36. };
  37.  
  38. //Что не так с этим кодом c точки зрения Promise? Как исправить?
  39. Q()
  40. .then(function() {
  41.     getRates()
  42.     .then(function(data) {
  43.         someAsyncFunction(data)
  44.         .then(function(data) {
  45.             console.log('Конец!', data);
  46.         })
  47.         .catch(function() {
  48.             console.log("Error in async func!")
  49.         })
  50.         .done();
  51.     })
  52.     .catch(function() {
  53.         console.log("Error happens");
  54.     })
  55.     .done();
  56. });
  57.  
  58. //Ответ:
  59. Q()
  60. .then(function() {
  61.     return getRates();
  62. })
  63. .then(function(data) {
  64.     return someAsyncFunction(data);
  65. })
  66. .then(function(data) {
  67.     console.log('Конец!', data);
  68. })
  69. .catch(function(err) {
  70.     console.log('Err', err);
  71. })
  72. .done();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement