Библиотека зацикливания, которая возвращает обещание - синхронизация - PullRequest
0 голосов
/ 04 августа 2020

Я ломаю голову над этим кодом: я читаю содержимое папки, l oop получил файлы через гигантское преобразование (которое возвращает обещание), а затем я создаю объект, который я хотел бы визуализировать. Я пробовал использовать asyn c и promises, но так и не смог сделать его синхронным. Не могли бы вы посоветовать?

fs.readdir('Documents', function (err, files) {
    files.forEach(function (file) {      
      mammoth.convertToHtml({path: "Documents/"+file},options)
      .then(function(result){
          var html = result.value; // The generated HTML
          var messages = result.messages; // Any messages, such as warnings during conversion
          docContent.push({
            "skillName" : file,
            "skillData" : html
          })
      }).done()
   });
});

res.render("index",{docContent:docContent});

1 Ответ

0 голосов
/ 04 августа 2020

Мне тоже было трудно понять концепцию сбора результата обещания ^^ ;. Я думаю, это хорошая отправная точка, чтобы помнить, что Promise.all() может собрать результат Promise.

Пожалуйста, попробуйте ниже.

    fs.readdir('Documents', function (err, files) {
        // convertingJob = [Promise, Promise,...]  
        const convertingJob = files.map(function(file) {  
            // just return promise and it will make above convertingJob array 
            return mammoth.convertToHtml({path: "Documents/"+file},options) 
                  .then(function(result){
                        var html = result.value; // The generated HTML
                        var messages = result.messages; // Any messages, such as warnings during conversion
                        // docContent.push({
                        //     "skillName" : file,
                        //     "skillData" : html
                        // })
                        return {
                            "skillName" : file,
                            "skillData" : html
                        }
                   })
                   // .done() // I'm not sure this is necessary
         });

         Promise.all(convertingJob) // Gather(wait) all Promise results!
         .then(jobResults => {      // jobResults would be array of objects returned by mammoth 
            res.render("index",{docContent:jobResults});
         })
    });
...