Javascript多个承诺不使用q和请求中

时间:2016-01-20 21:11:44

标签: javascript node.js callback request promise

所以这就是我的困境。我有一个电影列表,我从网站上刮下来的女巫,然后我想为我新构建的对象添加其他属性(json)

现在我使用的omdi api女巫支持按标题搜索电影。 然后我使用请求和q中间件发出get请求。当我在回调中从omdb api收到信息时,我将该数据添加到对象中。

现在下一部分是我的问题所在。现在我想使用前一个请求中的数据返回一个新请求。现在我创建一个新的获取请求并返回它,但然后()func isin不返回任何内容。但我似乎没有意识到我做错了什么。

这是我的代码..

var promises = [];
films.forEach(function (film) {
    // Get omdbapi information
    promises.push(HttpService.getContent(configExternal.omodburl + '?t=' + film.title.trim() + '&y=' + film.year + '&plot=true&tomatoes=true&r=json').then(function (data) { 
        var result = JSON.parse(data);
        if(Boolean(result.Response) === true) {
            film.omdb.push(result);
        }
        var imdbid = result.imdbID;
        return HttpService.getContent(configExternal.themoviedburl + imdbid + '/videos?api_key=' + configExternal.themoviedbkey);
    }).then(function(data) {
        film.trailers = [];
        film.trailers.push(JSON.parse(data));
    }).catch(function (err) {
        logger.error().info('Error getting ' + film.title + ' from omdb, ErrorMessage : ' + err);
    }));
});

//--------------------------------
// When all promises have finished
//--------------------------------
Promise.all(promises).then(function (data, err) {
    // do stuff with the data
});  

这是我的getContent func

var Service = {
    getContent: function(url) {
        var deferred = q.defer();
        request(url, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                deferred.resolve(body);
            } else {
                deferred.reject(error);
            }
        });
        return deferred.promise;
    }
};

1 个答案:

答案 0 :(得分:0)

问题解决了。罗默说,请求没有任何问题。但是,我不知道每10名女巫的移动数据基数限制了40个请求:)