我正在学习NodeJS来做一些自动化脚本,但是遇到了一个我不知道如何解决的问题。
我使用Google电子表格API和“ promisify-node”包,要求从电子表格中获取一些数据,并尝试返回部分数据以在另一个js文件中使用。
文件:sheets.js
const getProductsConfiguration = async(auth) =>
{
const sheets = google.sheets('v4');
const getValues = promisify(sheets.spreadsheets.values.get);
await getValues({
auth: auth,
spreadsheetId: utils.getSpreadsheedId(config.spreadsheet.configSpreadsheedUrl),
range: `${config.spreadsheet.configTabName}!A8:C1000`,
})
.then(function (response) {
var productsConfiguration = [];
for(var value in response.values)
{
if(response.values[value].length === 0) continue;
var productConfig = {
"productName": response.values[value][0],
"spreadsheetId": response.values[value][1],
"filterId": response.values[value][2]
};
productsConfiguration.push(productConfig);
}
console.log(productsConfiguration);
return productsConfiguration;
})
.catch(function (error){console.log(error); return false;});
};
app.js:
productsConfig = await spreadsheet.getProductsConfiguration(sheetAuth);
console.log(productsConfig);
此console.log返回“未定义”,但是“ spreadsheet.js”内部的console.log返回正确的数据。
我该怎么办?谢谢
答案 0 :(得分:0)
您可以只进行const values = await getValues({...})
。由于在返回承诺的函数前面使用await时,promise会解析为值,因此无需在其后加上一个小数。
const getProductsConfiguration = async(auth) => {
const sheets = google.sheets('v4');
const getValues = promisify(sheets.spreadsheets.values.get);
let values
try{
values = await getValues({
auth: auth,
spreadsheetId: utils.getSpreadsheedId(config.spreadsheet.configSpreadsheedUrl),
range: `${config.spreadsheet.configTabName}!A8:C1000`,
})
}catch(e){
console.log(error)
}
var productsConfiguration = [];
if(values){
for(var value in values) {
if(values[value].length === 0) continue;
var productConfig = {
"productName": values[value][0],
"spreadsheetId": values[value][1],
"filterId": values[value][2]
};
productsConfiguration.push(productConfig);
}
}
console.log(productsConfiguration);
return productsConfiguration
};
希望这会有所帮助!