我正在使用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);
}