Обратный вызов после завершения асинхронной рекурсивной функции

Функция ниже рекурсивно распечатывает закладки Chrome в папке. Как я могу изменить приведенную ниже функцию для вызова другой функции после обработки последнего рекурсивного цикла? chrome.bookmarks.getChildren () является асинхронным, что затрудняет определение того, когда функция завершила обработку всего.

Спасибо.

    for (var i = 0; i < foldersArray.length; i++) {
        // The loop makes several calls with different folder IDs.
        printBookmarks(foldersArray[i]);  
    }

    // I'd like any code here to be run only after the above has 
    //finished processing    

    function printBookmarks(id) {
        chrome.bookmarks.getChildren(id, function(children) {
           children.forEach(function(bookmark) { 
               console.debug(bookmark.title);
               printBookmarks(bookmark.id);
           });
        });
    }

РЕДАКТИРОВАТЬ: Извините, я не думаю, что я ясно понял исходный пример кода. Я обновил код, чтобы показать проблему с асинхронной функцией, вызывая ее несколько раз. Я бы хотел, чтобы любой код после вызовов функции printBookmarks ожидал завершения обработки всеми функциями printBookmarks .

17
задан Chin 15 June 2015 в 18:13
поделиться