javascript - 在另一个函数中使用异步值 (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 =>
使该数组成为返回值。
解决方案
你来做这件事:
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
推荐阅读
- python - 使用星期几、星期几和媒体类型创建回归模型?
- android - 如何将路线上的对象从起点移动到终点
- machine-learning - 应用 PCA 作为预处理步骤
- google-chrome-extension - Chrome 扩展程序:本地字体未导入
- javascript - 为什么填充jstree时不显示我的自定义html
- amazon-web-services - 为 devstack rocky 设置 Local.conf
- php - PHP-DI 注入静态类
- docker-compose - 容器中的空文件,使用带有卷的 docker-compose 来使用现有文件初始化映像
- sql-server - SSAS 内部错误:发生意外错误(文件“pfcre.cpp”函数 PFCREngine::SelectCartridge)
- docker - Kubernetes: MountVolume.SetUp failed: hostPath type check failed is not a directory