promise.all只返回第一个数据

时间:2016-04-13 18:02:04

标签: javascript promise bluebird

使用bluebird promise.all api迭代一些函数,但我似乎只从第一个函数返回数据

var _ = require('lodash');
var x = require('x-ray')();
var sentiment = require('sentiment');
var Promise = require('bluebird');

和下面的代码

 function joyPolitics() {
    return new Promise(function(resolve, reject) {
        x('http://www.myjoyonline.com/politics.php', 'ul.opinion-listings li', [{
            title: '.head .title a',
            desc: '.info',
            date: '.head',
            img: 'div.image-inner > a img@src',
            url: '.head .title a@href',
            fullStory: x('.head .title a@href', ['.main-article-section .storypane p'])
        }])(function(err, obj) {
            if (err) {
                reject(err)
            } else {
                _(obj).forEach(function(story) {
                    var a = story.fullStory;
                    story.category = 'politics';
                    story.mood = sentiment(a.join()).score;
                });
                resolve(obj);
            }
        })
    })
}
function joyEnt() {
    return new Promise(function(resolve, reject) {
        x('http://www.myjoyonline.com/entertainment.php', 'ul.opinion-listings li'
     ...
}
function execute() {
    return Promise.all(joyEnt(),joyPolitics());

}

当调用执行上面的数据时

activateCtrl.execute()
        .then(function(data,data1) {
            // return activateCtrl.loadToParse(data);
            res.json([data,data1]);
        }).catch(function(err) {
            res.send(err);
        })

它返回数据,但data1为空

1 个答案:

答案 0 :(得分:3)

… Promise.all(joyEnt(),joyPolitics()); …

Promise.all采用数组,而不是多个参数:

Promise.all([joyEnt(),joyPolitics()]);

此结果承诺不会满足多个值,但使用单个数组,因此您需要将then回调调整为 - 或使用spread代替。您也可以考虑使用Promise.join