首页 > 解决方案 > 在另一个函数中使用异步值 (JavaScript)

问题描述

我目前正在使用 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 =>

使该数组成为返回值。

标签: javascriptnode.jsasynchronous

解决方案


你来做这件事:

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

或者

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

但不要两者都做,这非常令人困惑。

编辑:正如评论者指出的那样,您可以等待任何事情,但是从您的代码中可以清楚地看出,您对async/await


推荐阅读