这个想法是,我将API数据存储在电子表格中,并使用“ google-spreadsheet”模块提取该数据,然后在进一步的操作中使用它。 如果运行从“ ss.js”获取数据的功能,则会得到一个异步响应,因为
async.series
依次执行一系列功能。 但是,如果尝试在“ index.js”中使用此函数,则可以启动该函数,但无法弄清楚为什么会出现以下错误:
TypeError:无法读取未定义的属性“ api_key”
在ss.getTGAuth.then(..... / routes / index.js:14:34)//已编辑
{api_key:'true_key',api_hash:'true_hash'} //已编辑
如果我使用单个异步函数而不是async.series,则一切正常。 这是故障文件。代码中有一些注释应该有助于理解。
----- ss.js -------
var GoogleSpreadsheet = require('google-spreadsheet');
var async = require('async');
var creds = require('./client_secret.json');
let getTGAuth = () => {
let doc = new GoogleSpreadsheet('sheetId');//the real ID is redacted
let sheet;
let tasks = [
function setAuth(step) {
doc.useServiceAccountAuth(creds, step);
},
function getInfoAndWorksheets(step) {
doc.getInfo(function(err, info) {
sheets = info.worksheets;
for (let i = 0; i < sheets.length; i++){
if(sheets[i].title == 'auth'){
sheet = sheets[i];
if (err) {
step(err);
}
step();
}
}
});
},
function workingWithRows(step) {
sheet.getRows(0,function(err,rows){
if (err) {
step(err);
}
step(null,{'api_key':rows[0].apikey,'api_hash':rows[0].apihash});
});
}
];
let res = async.series(tasks, (err, results) => {
if (err) {
console.log(err);
}
console.log(results[2]);// this gets executed with proper results
return results[2];
})
return res;
}
module.exports = { getTGAuth: getTGAuth };
----- index.js -----
let express = require('express');
let router = express.Router();
const ss = require('../ss.js');
router.get('/', (req, res, next) => {
ss.getTGAuth().then((r) => {
console.log('API KEY: '+ r.api_key); // this is where I get "TypeError: Cannot read property 'api_key' of undefined"
res.render('index', { api_key: r.api_key,api_hash: r.api_hash});
}).catch((e) => console.log(e));
});
module.exports = router;
由于调用.then()时没有错误,但是显然所有内容都正确连接,该函数被调用并被识别,但是它似乎并没有真正等待结果。