While loop using bluebird promises

前端 未结 2 763
灰色年华
灰色年华 2020-11-27 19:09

I am trying to implement a while loop using promises.

The method outlined here seems to work. http://blog.victorquinn.com/javascript-promise-while-loop it uses a fun

2条回答
  •  Happy的楠姐
    2020-11-27 19:56

    I prefer this implementation as its easier to simulate break and continue with it:

    var Continue = {}; // empty object serves as unique value
    var again = _ => Continue;
    
    var repeat = fn => Promise.try(fn, again)
      .then(val => val === Continue && repeat(fn) || val);
    

    Example 1: stops when either the source or the destination indicate an error

    repeat(again => 
        source.read()
        .then(data => destination.write(data))
        .then(again)
    

    Example 2: stop randomly if the coin flip given 90% probability results with a 0

    var blah = repeat(again =>
        Promise.delay(1000)
        .then(_ => console.log("Hello"))
        .then(_ => flipCoin(0.9) && again() || "blah"));
    

    Example 3: Loop with condition that returns the sum:

    repeat(again => {
      if (sum < 100) 
        return fetchValue()
          .then(val => sum += val)
          .then(again));
      else return sum;
    })
    

提交回复
热议问题