我是Promise / JS / ES6 n00b。遇到麻烦。
let downloadImage = (imageLink) => new Promise((res, rej) => {
let imageName = imageLink.split("/").reverse()[0];
https.request(imageLink, (response) => {
let data = new Stream();
response.on('data', (chunk) => {
data.push(chunk);
});
response.on('end', () => {
fs.writeFileSync('app_data/'+imageName, data.read());
return res(imageName);
});
}).end();
});
然后我尝试使用以下代码来使用上述代码:
let imagesArray = ["https://example.com/image1.jpg", "https://example.com/image2.png"];
let downloadedImagesArray = [];
for(let i = 0; i < imagesArray.length; i++){
downloadImage(imagesArray[i]).then(
(imageName) => {
//START NEW OBJECT
let picObj = {
id: new Date().toISOString(),
imageName: imageName
};
//ADD OBJECT TO ARRAY
downloadedImagesArray.push(picObj);
}
);
}
console.log(downloadedImagesArray); //THIS STILL RETURNS AS A BLANK ARRAY
我可以下载图片,但是我无法看到picObj
被添加到数组downloadedImagesArray
。这是一个可变范围问题吗?使用不同内存块的承诺中是downloadedImagesArray
吗?我试图将我在这里找到的解决方案应用到我的情况无济于事。我知道我会以愚蠢的方式解决这个问题。这里的任何帮助和解释清除它将是巨大的。提前致谢。