我正在使用google-spreadsheet库来访问数据并将数据插入Google表格。我能够添加多行,但是每行的添加顺序都没有特定顺序,我猜是由于addRow()异步行为造成的。

示例数据是:

let myData = [{id: "1", fname: "John"}, {id: "2", fname: "Matt"}, {id: "3", fname: "Paul"}]

for (let i = 0; i < myData.length; i++) {
    let row = myData[i];

    // Async call to insert row.
    doc.addRow(sheetIndex, row, (err) => {
        if (err) throw err;
    });
}


For循环会迭代并将每个行对象传递给addRow(),但是它并不关心将每一行插入Googlesheets时的顺序。

我试图做一个异步等待方法来等待doc.addRow()迭代到下一行对象,但我没有运气。有没有办法以我通过的相同顺序实现插入?提前致谢! :)

最佳答案

您可能无法等待该函数,因为它没有返回Promise。因此,让我们首先保证该功能。

function asyncAddRow(sheetIndex, row) {
  return new Promise((res, rej) => {
    doc.addRow(sheetIndex, row, (err) => {
      if (err) rej(err);
      else res(true);
    });
  })
}


现在,您不必呼叫doc.addRow,而是呼叫我们的asyncAddRow。由于它返回了承诺,因此您可以立即等待。像这样:

for (let i = 0; i < myData.length; i++) {
  let row = myData[i];

  await asyncAddRow(sheetIndex, row);
}

10-07 20:16