【发布时间】:2019-04-13 13:40:32
【问题描述】:
从下载功能下载图像后,我试图将数据推送到数组中。这是 nodejs 承诺中的一个问题。我该如何解决这个问题。
当前输出:
[
{
sku: 99104942591,
retailer: 'JCREWFCT',
images: []
}
]
预期输出:
[
{
sku: 99103497136,
retailer: 'JCREWFCT',
images: [
"http://localhost:4001/JCREWFCT/99103497136.png",
"http://localhost:4001/JCREWFCT/99103497136_1.png"
]
}
]
在outputArr我正在尝试存储数据
var downloadImages = async function() {
var outputArr = [];
for(var i=0; i<excelJsonArr.length; i++) {
var d = excelJsonArr[i];
var out = {
sku : d.sku,
retailer : d.retailer,
images : []
}
if(d.image_link_1) {
var saveDir = path.join('./public', d.retailer, d.sku+'.png');
var imgUrl = properties.get('protocol') + '://' + properties.get('hostname') + ':' + properties.get('port') + '/' + d.retailer + '/' + d.sku + '.png';
await download(d.image_link_1, saveDir, function(){
out.images.push(imgUrl);
});
}
if(d.image_link_2) {
var saveDir = path.join('./public', d.retailer, d.sku+'_2.png');
await download(d.image_link_1, saveDir, function(){
var imgUrl = properties.get('protocol') + '://' + properties.get('hostname') + ':' + properties.get('port') + '/' + d.retailer + '/' + d.sku + '_2.png';
out.images.push(imgUrl);
});
}
outputArr.push(out);
}
console.log(outputArr);
}
var download = async function(uri, filename, callback){
await request.head(uri, function(err, res, body){
console.log('content-type:', res.headers['content-type']);
console.log('content-length:', res.headers['content-length']);
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
});
};
【问题讨论】:
-
看起来您正在使用
async/await与不返回承诺的函数。这行不通。 -
您是否从下载回调中得到响应?您可以注销吗?另外,我在以下情况下看到
if(d.image_link_1)您的var imgUrl代码不在您的下载调用范围内。有什么特别的原因吗?
标签: javascript node.js promise es6-promise