ryanking8215
V2EX  ›  Node.js

Promise(bluebird)数组的处理

  •  
  •   ryanking8215 · Sep 25, 2014 · 5148 views
    This topic created in 4249 days ago, the information mentioned may be changed or developed.
    有一个异步任务,资源存在一数组里,需要按顺序完成
    一开始以为用Promise.map(),发现还是并发的。

    还有一个方法是用递归,但不清楚bluebird里是否有现成的接口呢?
    6 replies    2014-10-22 13:30:45 +08:00
    iwege
        1
    iwege  
       Sep 26, 2014   ❤️ 1
    https://github.com/petkaantonov/bluebird/blob/master/API.md#reducefunction-reducer--dynamic-initialvalue---promise

    这个应该是 ok 的。你只要在 reduce里面关注自身的数据,不去拿结果就好了。
    ryanking8215
        2
    ryanking8215  
    OP
       Sep 26, 2014
    Promise.reduce是可以的,没仔细看文档
    目前我是用递归的
    https://gist.github.com/ryanking8215/e0278be41de8da06a114
    iwege
        3
    iwege  
       Sep 26, 2014
    @ryanking8215
    也没必要递归,其实有简单的方法:

    var promise = Promise.resolve();
    array.forEach(function(){
    promise = promise.then(async_task);
    });

    promise.then(function(){/*done*/});
    ryanking8215
        4
    ryanking8215  
    OP
       Sep 26, 2014
    @iwege
    没明白,array.forEach()没办法保证一个promise被settle后再处理下一个;只能保证async_task是按顺序起的,这个和Promise.map()作用是一样的。
    ryanking8215
        5
    ryanking8215  
    OP
       Sep 26, 2014
    @iwege 我看错了,确实可以的,谢谢!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5541 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 08:23 · PVG 16:23 · LAX 01:23 · JFK 04:23
    ♥ Do have faith in what you're doing.