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

How to SEND the content when making a GET in Javascript?

我需要获取工作簿的所有数据,我尝试了一种方法,但它无法正常工作。问题是 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;
                            }
                        }
                    })
                });
        })
    }
}

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

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

P.S。我用“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
                });
        })
    }
}

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

干杯。