如何通过Node.js中的module.expotrs正确处理async.series函数

时间:2019-04-29 20:38:29

标签: node.js async-await node-modules

这个想法是,我将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()时没有错误,但是显然所有内容都正确连接,该函数被调用并被识别,但是它似乎并没有真正等待结果。

0 个答案:

没有答案