从promise中更新外部值

时间:2017-02-02 14:38:51

标签: javascript promise es6-promise

我有一个getValidUrls函数,它接受一个maxId参数。

在此函数中,它向后循环并发送对URL的请求。

每个循环递减maxId。

我的问题是我正在尝试将这些有效的URL添加到数组中,但是我无法在promise的.then中更新数组。我添加了一个简单的总变量来查看是否可以增加它而不能。

getValidUrls = (maxId) => {
    return new Promise((resolve, reject) => {
        let validUrls = [];
        let idCounter = maxId;
        let total = 0; // test to see if updated from inside (it doesn't)

           // while(validUrls.length < 10 && idCounter > 0) {
            for(let i = maxId; i > 0; i--){

                let newsUrl = `https://hacker-news.firebaseio.com/v0/item/${i}.json?print=pretty`;
                //console.log(newsUrl); // this shows all the urls & works

                getJSONObject(newsUrl)
                .then((story) => {
                    total++;
                    console.log(total); // this never gets shown
                    return getUserObject(story.by);
                }).then((user) => {
                    if(user.karma > 5) {
                        validUrls.push(story);
                        if(validUrls.length >= 10) {
                            resolve(validUrls);
                        }
                    } 
                });
            }
    });
};

以下命令返回url

的json对象
getJSONObject = (url) => {
    return new Promise((resolve, reject) => {
        console.log(url); // this works and shows all urls
        https.get(url, (response) => {
            response.on('data', (data) => {
                console.log(JSON.parse(data)); // This never gets shown
                resolve(JSON.parse(data));
            }, (err) => reject(err));
        }, (err) => reject(err));
    });
};

0 个答案:

没有答案