【发布时间】:2019-09-01 23:51:32
【问题描述】:
作为练习,我尝试将 https://developers.google.com/sheets/api/quickstart/nodejs 从回调样式转换为承诺样式,然后使用 util.promisify 将其重构为 async/await。
一切都很顺利,直到最后的功能。原文是:
function listMajors(auth) {
const sheets = google.sheets({version: 'v4', auth});
sheets.spreadsheets.values.get({
spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
range: 'Class Data!A2:E',
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
const rows = res.data.values;
if (rows.length) {
console.log('Name, Major:');
// Print columns A and E, which correspond to indices 0 and 4.
rows.map((row) => {
console.log(`${row[0]}, ${row[4]}`);
});
} else {
console.log('No data found.');
}
});
}
承诺的版本是:
function listMajors(auth) {
const sheets = google.sheets({version: 'v4', auth});
const getValues = util.promisify(sheets.spreadsheets.values.get);
getValues({
spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
range: 'Class Data!A2:E',
}).then(function (res) {
const rows = res.data.values;
if (rows.length) {
// Print columns A and E, which correspond to indices 0 and 4.
rows.map((row) => {
console.log(`${row[0]}, ${row[1]}`);
});
}
}).catch(err => console.log('The API returned an error: ' + err));
}
原始返回电子表格。承诺的版本说,The API returned an error: TypeError: Cannot read property 'context' of undefined。我不明白为什么它们不同。
【问题讨论】:
标签: node.js google-sheets google-sheets-api