如何创建一个.then循环?

时间:2018-02-06 07:02:11

标签: javascript asynchronous

我是javascript中.then概念的新手。我想知道是否可以创建一个for loop,其中包含.then

request.send(myRequest)
    .then(r => console.log(r, 0))
    .then(r => console.log(r, 1))
    .then(r => console.log(r, 2))
    .then(r => console.log(r, 3))
    .then(r => console.log(r, 4))

我希望动态地创建.then链,而不是像这样的手动解决方法,这样就可以执行.then ii++

3 个答案:

答案 0 :(得分:0)

如果promises之间没有依赖关系,你可以使用 promise.all([promise1,promise2])。then((arrayofresult)=> {})

或者您可以使用其他外部库bluebird

http://bluebirdjs.com/docs/api/promise.map.html

答案 1 :(得分:0)

如果它必须是顺序的,你总是可以这样做:

async function doSomeAsyncStuff(r, i, max) {
  if( i < max ) {
     await soSomeOtherAsyncStuff();

     return doSomeAsyncStuff(r, i+1, max )
  }
}

request.send(myRequest)
.then(r => {
   return doSomeAsyncStuff(r, i, 10)
})

但它总是取决于实际用例如何理想地解决问题。

答案 2 :(得分:0)

如果我没有错,我认为你正在寻找一种动态的方式来编写承诺链。这是一个简单的例子。在这里,我展示了一种方法来做这些事情。你可以根据自己的需要定制它。这是基本的。

function request(data){
   return new Promise((resolve,reject) => resolve(data))
}

var arrData = [1,2,3,4]

arrData.reduce((initial,data,index)=>initial.then(r => 
    {
       console.log(r);return request(data)

    }),Promise.resolve(0)).then(data=>console.log(data))