如何在不确定数组上使用 promise all

How to use promise all on an indeterminate array

我正在尝试编写一个通用函数来使用 puppeteer 填写表单。在非通用版本中,我做这样的事情:

function fillSpecificForm(values) {

  return Promise.all([
    page.$eval('#selector1', (el, values) => el.value = values[0], values),
    page.$eval('#selector2', (el, values) => el.value = values[1], values),
    page.$eval('#selector3', (el, values) => el.value = values[2], values),
  ])

}

我希望通用版本看起来像这样。

function fillAnyForm(selectors, values) {

  if(!isArray(selectors)) throw 'Parameter "selectors" must be an array'
  if(!isArray(values)) throw 'Parameter "values" must be an array'

  nPromises = Math.min(selectors.length, values.length)
  promises = []

  for(let i = 0; i < nPromises; i++) {
      promises.push(new Promise(/* This is the part I don't get */))
  }

  return Promise.all(promises);

}

而且我不能全神贯注于生成抽象的承诺。所以非常感谢帮助

您不需要 new Promise(),只需像在非通用版本中一样使用 page.$eval() 中的 return 值。

for(let i = 0; i < nPromises; i++) {
    promises.push(page.$eval(selectors[i], (el, value) => el.value = value, values[i]))
}