我有一个相当简单的问题,我似乎无法解决。我也无法在google / stackoverflow上找到任何内容(也许我只是使用了错误的关键字?)
我有一个值数组,我想为该数组中的每个元素调用一个特定的函数。棘手的是该函数返回一个promise,只有在解析了promise之后才能再次调用它。
如果我这样做的话,我不会在下一次函数调用之前等待承诺得到解决:
let paramerterArr = ['a','b','c','d','e','f']
paramerterArr.forEach((currentParam) => {
let promise = mySpecialFunction(currentParam)
})
如果我这样做,我将不得不编写大量冗余代码,而我无法更改我的数组:
let paramerterArr = ['a','b','c','d','e','f']
mySpecialFunction(paramerterArr[0]).then(()=> {
return mySpecialFunction(paramerterArr[1])
}).then(()=> {
return mySpecialFunction(paramerterArr[2])
}).then(()=> {
return mySpecialFunction(paramerterArr[3])
}).then(()=> {
return mySpecialFunction(paramerterArr[4])
}).then(()=> {
return mySpecialFunction(paramerterArr[5])
})
即使我愿意这样做,我也无法改变数组:
如果我这样做,我将不得不编写大量冗余代码,而我无法更改我的数组:
let paramerterArr = ['a','b','c','d','e','f']
let currentPos = 0
mySpecialFunction(currentPos).then(()=> {
currentPos++
return mySpecialFunction(currentPos)
}).then(()=> {
currentPos++
return mySpecialFunction(currentPos)
}).then(()=> {
currentPos++
return mySpecialFunction(currentPos)
}).then(()=> {
currentPos++
return mySpecialFunction(currentPos)
}).then(()=> {
currentPos++
return mySpecialFunction(currentPos)
})
我无法想出一个聪明的方法来做到这一点...... 也许你们中的某个人有一个想法,那会很棒。
答案 0 :(得分:2)
如果你想连续运行promises,你可以使用Array.reduce()
parameterArr.reduce(function(promise, item) {
return promise.then(function(result) {
return mySpecialFunction(item);
})
}, Promise.resolve())