为什么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))