在另一个函数中使用异步值(JavaScript)

时间:2019-04-10 00:44:27

标签: javascript node.js asynchronous

我目前正在使用Javascript解构数组,我想在其他函数中访问这些变量,但是目前,我正在努力寻找解决方法。

我尝试过调用该函数,然后调用console.log(thermostatArray)->我认为这返回了待处理的诺言

我尝试调用该函数并等待它,然后console.log thermostatArray

dataFormat()能够正确查看日志并使用该数组,但是heatCallCheck()不能,并且我还没有看到解决问题的方法。

var express = require("express");
var router = express.Router();
const multer = require("multer");
var Excel = require("exceljs");
const index = require("../routes/index");
const workbook = new Excel.Workbook();

async function convertFile(workbook) {
  csvWorkbook = workbook.csv.readFile("./uploads/uploadedFile.csv");
  await csvWorkbook.then(async function(csvWorkbook) {
    const worksheet = workbook.getWorksheet("sheet1");
    try {
      // await dataFormat(worksheet);
      await heatCallCheck(worksheet,)
    } catch (err) {
      console.log(err);
    }

    await workbook.xlsx.writeFile("./uploads/convertedFile.xlsx").then(() => {
      console.log("converted file written");
    });
  });
}


async function dataFormat(worksheet) {
  let thermostatArray = []
  await csvWorkbook.then(async function(worksheet) {
    const serialNum = worksheet.getCell("D1").value;
    const thermostatName = worksheet.getCell("D2").value;
    const startDate = worksheet.getCell("D3").value;
    const endDate = worksheet.getCell("D4").value;
    const thermostat = worksheet.eachRow({includeEmpty: true}, function(row,rowNumber){
      if (rowNumber > 6) {
      thermostatArray.push(row.values)
      }
    })
    console.log(`${thermostatArray[5]} Array Sample from dataFormat` )
    console.log(`${thermostatArray[6]} Array Sample from dataFormat` )
    return thermostatArray
})}


async function heatCallCheck(worksheet,thermostatArray) {
  let test = await dataFormat(worksheet).then(thermostatArray => {
    return thermostatArray[5]
  }).catch(err => {
    console.error(err)
  })
  console.log(`${test} result `)
}

在这种情况下,我的预期结果是,我可以使用heatCallCheck()函数看到恒温器数组中的第4个元素。

我认为在.then被调用之后我将能够访问它。

我的理解是.then(thermostatArray =>

使该数组成为返回值。

1 个答案:

答案 0 :(得分:0)

您这样做:

async function someFunction() {
   const myResultFromAPromise = await functionThatReturnsAPromise();
   // ....do some stuff
   return myResultFromAPromise;
}

OR

function someFunction() {
   return functionThatReturnsAPromise().then(function(myResultFromAPromise) {
      // ...do some stuff
      return myResultFromAPromise;
   });
}

但是不要两者都做,这简直令人困惑。

编辑:正如评论者所指出的,您可以等待任何事情,但是从您的代码中可以很明显地看出,您对async/await的观点感到很困惑