在 Javascript 中进行 GET 时如何发送内容?

问题描述

我需要获取一个工作簿的所有数据,我尝试了一个方法,但它不能正常工作..问题是Promise返回了第一个工作表的第一行,但它没有继续处理工作表的其余行,分别处理所有工作表,我不知道该怎么办。也许你知道..

所以我写了这段代码

const SheetGet = {
    getSheet: (req,res) => {
        return new Promise ((resolve,reject) => {
            XlsxPopulate.fromFileAsync(filePath)
                .then(workbook => {
                    const wb = xlsx.readFile(filePath,{cellDates: true});
                    const sheetNames = wb.SheetNames;
                    sheetNames.forEach(function (element){
                        let endOfData = false;
                        let i = 2;
                        let dataArr = [];
                        while (endOfData === false){
                            let taskId = workbook.sheet(element).cell("A" + i.toString()).value();
                            if (taskId !== undefined){
                                res.send({
                                    type: 'GET',list_name: element,task_id: taskId,task_name: workbook.sheet(element).cell("B" + i.toString()).value(),task_description: workbook.sheet(element).cell("C" + i.toString()).value(),task_due_date: workbook.sheet(element).cell("D" + i.toString()).value(),task_priority: workbook.sheet(element).cell("E" + i.toString()).value(),task_status: workbook.sheet(element).cell("F" + i.toString()).value(),task_notes: workbook.sheet(element).cell("G" + i.toString()).value()
                                });
                                i++;
                            }
                            else {
                                endOfData = true;
                            }
                        }
                    })
                });
        })
    }
}

它只得到这个然后它就停止了,我需要从工作表中获取所有数据。

enter image description here

您知道如何解决此问题吗?或者让它工作的正确方法?非常感谢您的时间和帮助!!!非常感谢每一个帮助!

附言我用“console.log”尝试了这段代码,它运行得很好,但问题是当我更改为 res.send 以便将信息发送给 Postman 时。

解决方法

我假设您使用 express 作为框架,问题是当您使用 res.send 方法时,服务器已经将数据发送到客户端,而其余代码仍在后台运行。我要处理这个案子是这样的。

const SheetGet = {
    getSheet: (req,res) => {
        return new Promise ((resolve,reject) => {
            XlsxPopulate.fromFileAsync(filePath)
                .then(workbook => {
                    const wb = xlsx.readFile(filePath,{cellDates: true});
                    const sheetNames = wb.SheetNames;
                    sheetNames.forEach(function (element){
                        let endOfData = false;
                        let i = 2;
                        let dataArr = [];
                        while (endOfData === false){
                            let taskId = workbook.sheet(element).cell("A" + i.toString()).value();
                            if (taskId !== undefined){
                                dataArr.push({ // this one
                                    type: 'GET',list_name: element,task_id: taskId,task_name: workbook.sheet(element).cell("B" + i.toString()).value(),task_description: workbook.sheet(element).cell("C" + i.toString()).value(),task_due_date: workbook.sheet(element).cell("D" + i.toString()).value(),task_priority: workbook.sheet(element).cell("E" + i.toString()).value(),task_status: workbook.sheet(element).cell("F" + i.toString()).value(),task_notes: workbook.sheet(element).cell("G" + i.toString()).value()
                                });
                                i++;
                            }
                            else {
                                endOfData = true;
                            }
                        }
                    })
                    return res.json({ data: dataArr }); // this one
                });
        })
    }
}

虽然有一些不必要的代码,但您可以做的最少更改是上面的代码。

干杯。