Возврат данных из Promise

1

Моя основная цель - использовать PDF.js и отправить проанализированные PDF-данные в интерфейс. Библиотека PDF.js работает над обещаниями и возвращает данные из файла по номеру страницы. Вот где моя проблема. Я не очень хорошо знаком с обещаниями и создаю в них циклы для возвращения данных. В настоящий момент мой код выглядит так:

var pdf = path.join(__dirname, '../../testoutput.pdf');
    pdfJsLib.getDocument(pdf).then(function(doc){
        var promises = [];
        for(i = 1; i <= doc.numPages; i++){
            //promises.push(doc.getPage(i));
            doc.getPage(i).then(function(page){
                promises.push(page.getTextContent());

                var response = [];
                if(i == doc.numPages + 1){
                    var promiseLimiter = promises.length;
                    Promise.all(promises).then(function(data){
                        response.push(data[0]);
                        if(promiseLimiter == doc.numPages){
                            res.status(200).json(response);
                        }
                    })
                }
            })

Я пытаюсь передать page.getTextContent() информацию в массив и отправить массив как ответ, но я понимаю, что я делаю это неправильно. Любые идеи, как заставить цикл работать с обещаниями в этом случае?

  • 1
    Promise.all, должен быть вне для, чем закончен и выполнены обещания обр
  • 0
    что такое getTextContext ()
Показать ещё 1 комментарий
Теги:
express
promise

1 ответ

2
Лучший ответ

Похоже, вы хотели бы сделать что-то вроде этого

var pdf = path.join(__dirname, '../../testoutput.pdf');
pdfJsLib.getDocument(pdf).then(function(doc){
    var promises = [];
    var promiseLimiter ;
    for(i = 1; i <= doc.numPages; i++){
        //promises.push(doc.getPage(i));
        var p = doc.getPage(i).then(function(page){
            return page.getTextContent();

            var response = [];
            if(i == doc.numPages + 1){
                promiseLimiter = promises.length;
            }
        })
        promises.push(p);
    }
    Promise.all(promises).then(function(data){
                    if(promiseLimiter == doc.numPages){
                        res.status(200).json(data);
                    }
                })
  • 1
    Если вы попытаетесь просмотреть массив обещаний из then (), он будет пустым. В общем, вам нужно реализовать какой-то цикл с обещанием и возвращаемыми данными. И это место, где мои знания останавливаются.
  • 0
    ах, да, позвольте мне отредактировать мой ответ. Проверить снова.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню