执行while循环会导致致命错误

问题描述 投票:0回答:1

我正在尝试使用Google Drive API获取特定文件夹中的文件列表。现在,当我尝试运行do..while循环以获取小块文件列表时,应用程序崩溃并出现致命错误:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory  

Snippet

function listFiles(auth) {
    const drive = google.drive({ version: "v3", auth });
    let pageToken = null;

    do {
        drive.files.list({
            pageSize: 10,
            q: "'root' in parents and trashed=false",
            fields: "nextPageToken, files(id, name)",
            pageToken: pageToken,
        }, (err, res) => {
            if (err) return console.error(`The API returned an error: ${err}`);

            pageToken = res.data.nextPageToken;
            const files = res.data.files;

            if (files.length) {
                files.forEach((file) => {
                    console.log(`${file.name}  (${file.id})`);
                });
            } else {
                console.log("No files found!");
            }
        });
    }
    while(!pageToken);

[AFAIK如果没有更多文件,则nextPageToken将是未定义的。

javascript node.js google-drive-api gapi
1个回答
1
投票

我相信您已经听说过JS中的“异步”一词。显然drive.files.list是一个回调样式异步函数。而且pageToken = res.data.nextPageToken分配发生在该回调内部,这意味着pageToken的值不会立即从null更改为something

但是您的...逻辑同时发生。因此,while(!pageToken)基本上等于while(true)。因此,您会收到错误消息,程序陷入无限循环。

© www.soinside.com 2019 - 2024. All rights reserved.