首页 > 开发 > JS > 正文

关于异步函数中保存回调数据的问题

2017-09-05 05:51:24  来源:网友分享

为什么console.log(theFile)能输出数据,而不能保存到dateArray数组中。
如果要保存到dataArray数组中,是不是也要构造一个异步函数

code

        var dataArray = [];        for(let i = 0; i < files.iconImage.length; i++) {            // var iconFile = files.iconImage[i];            if(files.iconImage[i].size !== 0){              fs.readFile(files.iconImage[i].path, function(err, data){                if(err) {                  return res.send('读取文件失败');                }                var theFile = new AV.File(files.iconImage[i].originalFilename, data);                theFile.save().then(function(theFile){                  console.log(theFile);                  dataArray.push(theFile);                }).catch(console.error);              });            } else {              res.send('请选择一个文件。');            }        }        res.json({            success: true,            data: dataArray        })      });

解决方案

可以使用 Promse.all 获取所有数据,并在 then 里 res.json

思路供参考

Promise.all(  files.iconImage  .filter(icon => icon.size !== 0)  .map(icon => new Promise((resolve, reject) => {    fs.readFile(icon.path, (err, data) => {      if (err) { return reject('读取文件失败') }      resolve(new AV.File(icon.originalFilename, data).save())    })  }))).then(dataArray => res.json({success: true, data: dataArray})).catch(error => res.send(error))