首页 > 解决方案 > 承诺回到解决之前

问题描述

我有书籍对象,其数据存储在文件中。我正在从每个文件中读取数据并创建书籍。

这里的问题是 createBooks 承诺,然后在读取文件完成和 createBook 方法调用成功之前被调用。

  createBooks: function (books) {
    return new Promise((resolve, reject) => {
        const booksArray = Object.entries(books);
        const aPromises = [];
        booksArray.forEach(([key, value]) => {          
            if(value.data){
                const oFileReader = new FileReader();
                oFileReader.readFile(value.data)
               .then((product) => {
                aPromises.push(this.Service.createBook(books));
               });
            }
        });
        Promise.all(aPromises)
            .then(results => resolve(results))
            .catch(error => reject());
        });
  },

标签: javascriptpromise

解决方案


尝试在aPromises之前记录数组值Promise.all(aPromises)。有 Promise<> 对象吗?

this.Service.createBook(books)回报是什么?

FileReader没有readFile方法。

你应该使用oFileReader.onload处理程序

oFileReader.onload = function(){
    aPromises.push(this.Service.createBook(books));
};

oFileReader.readAsDataURL(value.data); // value.data - has to be File
// oFileReader.readAsText(value.data); // value.data - has to be blob

推荐阅读