【发布时间】:2019-04-10 09:03:33
【问题描述】:
我目前正在使用 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 =>
使该数组成为返回值。
【问题讨论】:
-
你不要同时使用
await和then。 -
thermostatArray肯定不是承诺,因为您已将其定义为[]。我不清楚为什么你需要csvWorkbook.then上的内部async函数——你不会在其中的任何地方使用await。从exceljsdocs 我不清楚csvWorkbook是一个承诺。您是否需要等待它(这样做不会有害)? -
@Adam 你当然可以同时使用
await和then,尽管通常没有很好的理由这样做。await旨在替换.then -
@JasonHarder you
await一个承诺,然后只做普通代码。这个想法是摆脱嵌套的.then调用 -
您严重误解了异步 javascript。观看此youtube.com/watch?v=SrNQS8J67zc。
标签: javascript node.js asynchronous