|      1freeminder      2017-04-07 18:24:12 +08:00 再包一层 objTemp = axiosLoop(i).then((function (idx){ return function(data){ console.log(data); return axiosLoop(idx); } })(i+1)).catch(function (error) { console.log(error); }); | 
|  |      2nino      2017-04-07 18:43:50 +08:00 <script src="https://gist.github.com/yxnino/2856a4971639f81248b56ab691eeaa2c.js"></script> | 
|  |      3AlisaDestiny      2017-04-07 18:56:27 +08:00 @freeminder 跟我第一感一样。用闭包。 | 
|  |      4bdbai      2017-04-07 21:52:20 +08:00 via Android 支持 ES6 的话,把 for 里面的 var 改成 let 。 | 
|      5hythyt9898      2017-04-07 22:06:32 +08:00 via iPhone 为何不用 async/await ? | 
|  |      6mogita      2017-04-07 23:19:01 +08:00 via iPhone 比较脏难维护和扩展,但能解燃眉之急的方案:引 deasync 包,把请求封装成一个同步方法。 需要额外学习、要求特定 nodejs 版本或使用编译工具,但优雅稳定的方案: async/await 。 | 
|  |      7abcbuzhiming OP @freeminder  @AlisaDestiny @ck65 谢谢楼上各位,奋斗了一晚上,终于在重新理解 promise 模型和闭包变量作用域的基础上,按照 freeminder 的方法搞定了。折腾死了,我终于明白为啥 Promise 仅仅出来了两年就被 async/await 干掉了, 12 万分的希望 async/await 早日在前端普及吧,再也不想拿 Promise 写东西了 | 
|  |      8spritevan      2017-04-08 01:10:35 +08:00 | 
|  |      9imdoge      2017-04-08 01:34:52 +08:00 可以用 reduce 来, arr.reduce((promise, item) => { return promise.then(() => asyncReq(item)), asyncReq1()} | 
|  |      10xieranmaya      2017-04-08 12:31:57 +08:00 [p1,p2,p3].reduce((seq,next) => seq.then(value=>next()), Promise.resolve()) 说白了有点像 x = x + n 你看啊: seq = seq.then(value => task(value) 是不是很像 | 
|  |      11bdbai      2017-04-08 22:00:58 +08:00 via Android @abcbuzhiming Promise 活的好好的,没被干掉吧。 嫌原生 Promise 不好用可以试试 bluebird 。 | 
|  |      12xieranmaya      2017-04-09 12:49:30 +08:00 @abcbuzhiming  @bdbai 说的很对, Promise 并没有“被” async/await 干掉,相反, async/await 是基于 Promise 的,如果你不深入理解 Promise ,你也不会真正理解 async/await ,事实上, async 函数的调用就是返回 Promise ,而 await 操作符后面必须是一个 Promise 对象,这意味着你要用 async/await 的时候,必须还是要自己实现一些返回 Promise 的函数 | 
|  |      13LeoEatle      2017-04-09 14:31:53 +08:00 via iPhone 最简单的处理方案就是,用 let |