아래의 "--1Start--"에서 "--1End--"까지의 코드에서 아래의 "--2Start--"에서 "--2End--"까지의 코드로 변경하니 폴더 안의 경로에 대해서는 적용되지 않는 상황이 발생하였다. 어떤점이 수정되어서 이렇게 된건지와, 2번 코드에서도 폴더 안의 즐겨찾기를 방문했을 때, "!"으로 시작하는 즐겨찾기를 건드리지 않고 최상위로 배치하는 1의 기능과 같게 구현하려면 어떻게 해야하는가?

--1Start--
function dumpNode(bookmarkNode, result_url, arr) {
    if (bookmarkNode.url === result_url) {
        chrome.bookmarks.move(bookmarkNode.id, { index: 0 });
        var song = bookmarkNode;
        if (song.parentId != 1) {
            for (var j = 1; j < arr.length; ++j) {
                if (arr[j].id != 1)
                    chrome.bookmarks.move(arr[j].id, { index: 0 });
            }
        }
    }

    if (bookmarkNode.children && bookmarkNode.children.length > 0) {
        arr.push(bookmarkNode);
        dumpTreeNodes(bookmarkNode.children, result_url, arr);
        arr.pop();
    }
}

function dumpTreeNodes(bookmarkNodes, result_url, arr) {
    for (var i = 0; i < bookmarkNodes.length; i++) {
        dumpNode(bookmarkNodes[i], result_url, arr);
    }
}

chrome.history.onVisited.addListener(function (result) {
    chrome.bookmarks.getTree(function (bookmarkTreeNodes) {
        var arr = [];
        dumpTreeNodes(bookmarkTreeNodes, result.url, arr);
    });
});

chrome.webRequest.onBeforeRequest.addListener(function(details) {
    console.info("URL :" + details.url);
    chrome.bookmarks.getTree(function (bookmarkTreeNodes) {
        var arr2 = [];
        dumpTreeNodes(bookmarkTreeNodes, details.url, arr2);
    });
},
{urls: ["<all_urls>"]}
);
--1End--

--2Start--
// 비동기 처리를 위해 Promises를 활용합니다.
function getChildrenAsync(parentId) {
    return new Promise((resolve, reject) => {
        chrome.bookmarks.getChildren(parentId, function(children) {
            if (chrome.runtime.lastError) {
                reject(chrome.runtime.lastError);
            } else {
                resolve(children);
            }
        });
    });
}

function moveBookmarkAfterSpecial(bookmarkId, parentId) {
    return getChildrenAsync(parentId).then(children => {
        // '!'으로 시작하는 즐겨찾기의 개수 계산
        let specialCount = children.filter(child => child.title.startsWith('!')).length;
        // 이동할 인덱스는 specialCount
        return new Promise((resolve, reject) => {
            chrome.bookmarks.move(bookmarkId, { parentId: parentId, index: specialCount }, function() {
                if (chrome.runtime.lastError) {
                    reject(chrome.runtime.lastError);
                } else {
                    console.log(`Moved bookmark ID ${bookmarkId} to index ${specialCount} under parent ID ${parentId}`);
                    resolve();
                }
            });
        });
    });
}

async function dumpNode(bookmarkNode, result_url, arr) {
    try {
        if (bookmarkNode.url === result_url) {
            // '!'으로 시작하지 않는 경우에만 이동
            if (!bookmarkNode.title.startsWith('!')) {
                await moveBookmarkAfterSpecial(bookmarkNode.id, bookmarkNode.parentId);
            }

            var song = bookmarkNode;
            if (song.parentId != '1') { // 부모 ID가 '1'이 아닐 경우
                // arr 배열을 순회하며 이동
                for (var j = 0; j < arr.length; ++j) {
                    if (arr[j].id != '1' && !arr[j].title.startsWith('!')) {
                        await moveBookmarkAfterSpecial(arr[j].id, arr[j].parentId);
                    }
                }
            }
        }

        if (bookmarkNode.children && bookmarkNode.children.length > 0) {
            arr.push(bookmarkNode);
            await dumpTreeNodes(bookmarkNode.children, result_url, arr);
            arr.pop();
        }
    } catch (error) {
        console.error(`Error processing bookmark ID ${bookmarkNode.id}:`, error);
    }
}

async function dumpTreeNodes(bookmarkNodes, result_url, arr) {
    for (let i = 0; i < bookmarkNodes.length; i++) {
        await dumpNode(bookmarkNodes[i], result_url, arr);
    }
}

// 이벤트 리스너 설정
chrome.history.onVisited.addListener(function (result) {
    chrome.bookmarks.getTree(function (bookmarkTreeNodes) {
        var arr = [];
        dumpTreeNodes(bookmarkTreeNodes, result.url, arr);
    });
});

chrome.webRequest.onBeforeRequest.addListener(function(details) {
    console.info("URL :" + details.url);
    chrome.bookmarks.getTree(function (bookmarkTreeNodes) {
        var arr2 = [];
        dumpTreeNodes(bookmarkTreeNodes, details.url, arr2);
    });
},
{urls: ["<all_urls>"]}
);
--2End--