从承诺返回的访问数据

时间:2017-11-08 05:54:54

标签: javascript promise

我是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吗?我试图将我在这里找到的解决方案应用到我的情况无济于事。我知道我会以愚蠢的方式解决这个问题。这里的任何帮助和解释清除它将是巨大的。提前致谢。

0 个答案:

没有答案