我想每分钟轮询一个源列表,并从在线的源列表中从源中提取数组,检查是否存在有效元素并随机选择两个元素并对它们执行异步操作。我的代码看起来像。
const sources = ['source1', 'source2', 'source3']
setInterval(function() {
sources.forEach((source) => {
asyncResolveToArrayIfOnline(source)
.then((list) => {
if (list) {
return Promise.all(list.map((element) => {
return asyncCheckElement(element).then((trueOrFalse) => {
return [trueOrFalse, element]
})
}))
}
})
.then((arrayOfResults) => {
if (arrayOfResults) {
let validElementsArray = []
arrayOfResults.forEach((validElement) => {
if (validElement[0]) {
validElementsArray.push(validElement[1])
}
})
if (validElementsArray.length >= 2) {
drawTwoElements()
asyncAction(firstDrawnElement, secondDrawnElement)
}
}
})
.catch(function(err) {
console.log(err)
})
})
}, 60000)
大部分时间都有效。该错误似乎来自这样的事实:asyncResolveToArrayIfOnline(source)有时source2解析而source1尚未处理完成并且已解析的列表被传递给错误的循环。