我正在使用Google Sheets API复制工作表,并且要将新工作表的ID传递给变量。
我可以在回调函数中成功获取工作表ID(使用result.data.sheetId
),但是我很难在函数之外使用它。
我正在使用async
/ await
语法,并且我也尝试过utils.promisify
,但是没有运气!
async function copySheet(jwt, apiKey, spreadsheetId, range) {
const sheets = google.sheets({ version: 'v4' });
let newSheetId = await sheets.spreadsheets.sheets.copyTo({
"spreadsheetId": spreadsheetId,
"sheetId": 0,
"auth": jwt,
"key": apiKey,
"resource": {
"destinationSpreadsheetId": spreadsheetId,
}
}, function (err, result) {
if (err) {
throw err;
}
console.log(result.data.sheetId);
return result.data.sheetId;
});
console.log(newSheetId);
}
第一个console.log
显示我想要的号码,但是第二个记录undefined
。
您是否有建议让我在回调函数之外使用sheetId?
答案 0 :(得分:1)
函数sheets.spreadsheets.sheets.copyTo
不返回任何内容(undefined
)。
您应该让函数返回一个承诺,以便await
实际上等待结果:
async function copySheet (jwt, apiKey, spreadsheetId, range) {
const sheets = google.sheets({ version: 'v4' })
const newSheetId = await new Promise((resolve, reject) => {
sheets.spreadsheets.sheets.copyTo({
spreadsheetId: spreadsheetId,
sheetId: 0,
auth: jwt,
key: apiKey,
resource: {
destinationSpreadsheetId: spreadsheetId,
}
}, function (err, result) {
if (err) {
reject(err)
}
resolve(result.data.sheetId)
})
})
console.log(newSheetId);
}
答案 1 :(得分:1)
此修改如何?请认为这只是几个答案之一。
请按如下所示修改脚本。
let newSheetId = await sheets.spreadsheets.sheets.copyTo({
"spreadsheetId": spreadsheetId,
"sheetId": 0,
"auth": jwt,
"key": apiKey,
"resource": {
"destinationSpreadsheetId": spreadsheetId,
}
}, function (err, result) {
if (err) {
throw err;
}
console.log(result.data.sheetId);
return result.data.sheetId;
});
console.log(newSheetId);
let res = await sheets.spreadsheets.sheets.copyTo({
"spreadsheetId": spreadsheetId,
"sheetId": 0,
"auth": jwt,
"key": apiKey,
"resource": {
"destinationSpreadsheetId": spreadsheetId,
}
});
let newSheetId = res.data.sheetId;
console.log(newSheetId);
spreadsheets.sheets.copyTo()
使用POST方法。因此,在这种情况下,无法使用API密钥。我认为即使删除key: apiKey
,该脚本也可以正常工作。如果这不是您想要的结果,我表示歉意。