最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

同步迭代异步函数

运维笔记admin12浏览0评论

同步迭代异步函数

同步迭代异步函数

我有一个函数从oracle数据库,excel文件中读取数据,并对数据执行一些操作,然后将结果数据存储在excel文件中。

const app = require('./index.js');
app('ZR_CUSTOMER_INVOICES Functional Specification')
const azureFunction = require('./connections/azureConnection');
const idsFunction = require('./connections/idsconnection');
const xlsFunction = require('./connections/readExcel');
const writeToExcel = require('./connections/writeToExcel');
var azureData;
var idsData;
var xlData;
var xlColumns;
var azureColumns;
var idsColumns;
var resultData;
var table_name;
var file_name='';
function app(fileName){
  file_name=fileName
  xlsFunction(file_name,xlCallback);
}
function xlCallback(xlresult,tName){
  table_name=tName;
  xlData=xlresult
  xlColumns=xlData.map((a,i)=>{
    return a.Columns
  })
  var azquery=`exec sp_columns  ${table_name}`
  azureFunction(azquery,acallback);
}
function acallback(azresult){
  // let table_name=xlData[0]['View Name']
  let idsquery=`select COLUMN_Name from ids_columns where table_id = (select table_id from ids_tables where table_name ='${table_name}')`;
  azureData=azresult;
  azureColumns=azureData.map((a,i)=>{
    return a.value
  })
  idsFunction(idsquery,icallback);
}
function icallback(idsresult){
  idsData=idsresult;
  idsColumns=idsresult.rows.map((a,i)=>{
    return a[0]
  })
  finalFunction()
}
function finalFunction(){
  resultData=xlData.map((a,i)=>{
    if(a.Columns==''){
      return;
    }
    a['inIds?']=idsColumns.includes(a.Columns);
    a['inAzure?']=azureColumns.includes(a.Columns);
    return a;
  })
  resultData=resultData.filter((a,i)=>{
    return a!==undefined;
  })
  // console.log(resultData);
  writeToExcel(resultData,file_name)
  console.log('done');
}

module.exports=app;

这工作正常。

但如果我两次打电话给应用程序。

const app = require('./index.js');
app('ZR_CUSTOMER_INVOICES Functional Specification')
app('ZR_CONTACTS Functional Specification')

我只获得输出一次,然后控件也不会中断。

我认为与数据库的连接存在一些问题,所以我想同步并检查。

//如果你需要任何代码,请评论我。

回答如下:

你有一堆变量(例如var azureData;),它们是作用于模块的。

当您调用该函数两次时,两组函数调用将共享这些变量。

特别是,这意味着file_name=fileNamefile_name设置为'ZR_CUSTOMER_INVOICES Functional Specification'然后设置为'ZR_CONTACTS Functional Specification',并且两个调用将继续使用值为'ZR_CONTACTS Functional Specification'的变量。

app范围内定义那些变量。然后定义所有需要在app中访问它们的函数,以便变量在它们的范围内。

每次调用app都会有自己的一组变量,它们不会互相覆盖。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论