V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ryanking8215
V2EX  ›  Node.js

Promise(bluebird)数组的处理

  •  
  •   ryanking8215 · 2014-09-25 15:33:36 +08:00 · 4408 次点击
    这是一个创建于 3498 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个异步任务,资源存在一数组里,需要按顺序完成
    一开始以为用Promise.map(),发现还是并发的。

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

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

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

    promise.then(function(){/*done*/});
    ryanking8215
        4
    ryanking8215  
    OP
       2014-09-26 13:10:18 +08:00
    @iwege
    没明白,array.forEach()没办法保证一个promise被settle后再处理下一个;只能保证async_task是按顺序起的,这个和Promise.map()作用是一样的。
    ryanking8215
        5
    ryanking8215  
    OP
       2014-09-26 13:24:55 +08:00
    @iwege 我看错了,确实可以的,谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5378 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:47 · PVG 16:47 · LAX 01:47 · JFK 04:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.