node.js - 如何突破 eachRow 方法?
问题描述
如果满足条件,那么我想停止循环剩余的行:
var express = require('express');
var router = express.Router();
var Excel = require("exceljs");
var path = require("path");
router.get("/lireExcel/:nbRows", function(req, res) {
var ret = [];
var nb = req.params.nbRows;
var i = 0;
var filename = path.join(__dirname, 'test.xlsx');
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename).then(function () {
var sheet = workbook.getWorksheet(1);
sheet.eachRow(function(enreg, rowNumber) {
if (rowNumber > 1) { // after the header
i++;
if (i <= nb) { // get only the nb number of rows
var row = sheet.getRow(rowNumber);
var msisdn = row.getCell(1).value;
var matricule = row.getCell(2).value;
if (msisdn != null) {
ret.push({"msisdn":msisdn, "immatriculation":matricule});
}
}
else {
// how to get out of the loop here ?
}
}
}
}
});
在这种情况下如何摆脱 eachRow 方法?
解决方案
const excelPromise = new Promise((resolve, reject) => {
workbook.getWorksheet(1).eachRow(async(row, rowNumber) => {
if (rowNumber > 1) {
i++;
if (i <= nb) { ... }
else reject('Invalid ...');
// finally resolve
if(rowNumber == workbook.getWorksheet('data').rowCount) resolve();
}
}
}
excelPromise.then((成功) => {
console.log(success);
},
(error) => {
console.log(error);
}
);
推荐阅读
- php - 向管理员和客户发送电子邮件通知,以便在 WooCommerce 中使用信用卡支付待处理订单
- ansible - Ansible:在给定一组特定主机目标的情况下,在两个远程主机之间同步文件
- angular - 如何在角度 6 中给出会话空闲超时?
- node.js - Viber Chatbot - 创建回声机器人
- javascript - Why is my Javascript view on a buffer all zeroes?
- laravel - 等待本地主机...永远不会结束
- php - Symfony - 添加布尔操作字段
- excel - 如何在 Excel 的新工作表中将列转置为矩阵?
- php - 获取每个文件的文件名的文件创建日期,而不是仅获取 1 个文件的文件创建日期?
- python-3.x - 如何在 python 和 QtWebEngine 中启用 allowGeolocationOnInsecureOrigins