使用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为空
答案 0 :(得分:3)
… Promise.all(joyEnt(),joyPolitics()); …
Promise.all
采用数组,而不是多个参数:
Promise.all([joyEnt(),joyPolitics()]);
此结果承诺不会满足多个值,但使用单个数组,因此您需要将then
回调调整为 - 或使用spread
代替。您也可以考虑使用Promise.join
。