NodeJS脚本停留在对OMBD API的多个查询上

时间:2017-03-28 02:43:54

标签: node.js

我试图通过IMDB检索OMDB API中所有电影的数据。为了实现这一点,我制作了一个简单的NodeJS脚本,该脚本运行所有可用的IMDB电影ID,为每个ID进行API调用。此ID的格式为ttXXXXXXX,其中X为整数。

问题在于,如果for循环的迭代次数大于~2500,则脚本会停留在最后3到8个查询中。

可能会发生什么?考虑到迭代次数,这是一个内存问题吗?

脚本本身如下:

const http = require('http');

var asyncsLeft  = 0;    // This is used to track when the final http.request callback is done
var movieCount  = 0;    // Count the number of movies retrieved
var N           = 10000 // Number of iterations

// Callback for the OMBD API call
function callback(res) {
    var movieRawData = '';
    res.setEncoding('utf8');

    // Getting the chunks of data from the API response
    res.on('data', (chunk) => {
        movieRawData += chunk;      
    });

    res.on('end', function() {
        var movieData = JSON.parse(movieRawData)    
        if(movieData.Type == 'movie') {
            console.log(++movieCount + "\t" + movieData.Title);
        }
    });

    res.on('error', function(err) { console.log(err);   });
};

for(var i = 0; i <= N; i++) {
    // Options for the API call
    var options = {
        host: 'www.omdbapi.com',
        path: '/?i=tt' + idGenerator(i),
        method: 'GET',
    };

    // Making the API call itself and increment the async calls counter
    var req = http.request(options, callback);
    asyncsLeft++;

    req.on('error', function(e){    console.log(e)  });
    req.end();
};

// Function to generate valid seven digits IMDB's movie ID
function idGenerator(index) {
            if (index >= 1000000){ return '' + index;       }
    else    if (index >= 100000) { return '0' + index;      }
    else    if (index >= 10000)  { return '00' + index;     }
    else    if (index >= 1000)   { return '000' + index;    }
    else    if (index >= 100)    { return '0000' + index;   }
    else    if (index >= 10)     { return '00000' + index;  }
    else    if (index >= 0)      { return '000000' + index; }
}

0 个答案:

没有答案