Advertisement
shapoval

Promise chain with async.retry

Aug 23rd, 2019
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const async = require('async');
  2.  
  3. function step1() {
  4.   return new Promise((resolve, reject) => {
  5.     setTimeout(() => {
  6.       resolve("success step1")
  7.     }, 1000)
  8.   })
  9. }
  10.  
  11. let triesLeft = 5;
  12.  
  13. function step2() {
  14.   const myFunc = (callback) => {
  15.     triesLeft--
  16.     console.log("Step2 tries left:", triesLeft);
  17.     setTimeout(() => {
  18.       if (triesLeft > 0) { // Fail 5 times
  19.         return callback({ message: 'FAIL' }, null);
  20.       }
  21.       return callback(null, "success step2");
  22.     }, 0)
  23.   }
  24.  
  25.   return new Promise((resolve, reject) => {
  26.     async.retry(
  27.       { times : 25, interval : 1000 },
  28.       myFunc,
  29.       (err, result) => {
  30.         if (result) {
  31.           return resolve(result);
  32.         } else {
  33.           return reject(err);
  34.         }
  35.       }
  36.     );
  37.   });
  38. }
  39.  
  40. function step3() {
  41.   return new Promise((resolve, reject) => {
  42.     setTimeout(() => {
  43.       resolve("success step3")
  44.     }, 1000)
  45.   })
  46. }
  47.  
  48. step1()
  49. .then((result) => {
  50.   console.log(`step1 result: ${result}`)
  51.   return step2()
  52. })
  53. .then((result) => {
  54.   console.log(`step2 result: ${result}`)
  55.   return step3()
  56. })
  57. .then((result) => {
  58.   console.log(`step3 result: ${result}`)
  59. })
  60. .catch((err) => {
  61.   console.log("failed")
  62. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement