【发布时间】:2015-11-20 11:12:52
【问题描述】:
我有一个链接数组,我在第一个请求中得到了这些链接。我的目标是去每个环节收集数据。所以我想为每个请求做出一个承诺,将它们全部推送到一个数组中,然后传递给 Q.all 来解决所有的承诺。问题是我无法返回承诺并转到下一个链接 这是函数,我尝试发出多个请求并收集数据
function arrayPromise(linksArr){
function collectingData(elem){
var deferredNew = Q.defer();
var url = elem;
request(url, function(error,response,html){
if(error){
deferredNew.reject(error);
}
var $ = cheerio.load(html);
var title, content;
$('.entry-title').filter(function(){
var data = $(this);
var title = data.text();
items.text.push(
{ titleof: title }
)
})
$('.entry-content ').filter(function(){
var data = $(this);
var content = data.html();
items.text.push(
{ contentof: content})
})
deferredNew.resolve(items);
})
console.log("Returning the promise");
return defferedNew.promise;
}
var promiseArr;
console.log("LENGTH:");
console.log(linksArr.length);
for (var i = 0; i < linksArr.length; i++) {
console.log(linksArr[i]);
var tempPromise = collectingData(linksArr[i]);
console.log(tempPromise);
promiseArr.push(tempPromise);
};
return promiseArr;
}
以及我如何尝试使用它
var linksPromise = fetchLinks();
linksPromise.then(function(arr){
console.log("LINKS PROMISE RESOLVED");
Q.all(arrayPromise(arr)).then(function(data){
console.log("SUCCESS RESOLVING ALL PROMISES")
console.log(data);
},function(err){
console.log("ERROR RESOLVING ALL PROMISES", err);
});
},function(err){
console.log(err);
})
【问题讨论】:
-
然后传递给 Q.all 来解决所有的承诺 - 我想你误解了
Q.all的功能。它不会解析传入的 Promise,它会在传入数组中的所有 Promise 解析时解析,或者当其中任何一个 Promise 拒绝时拒绝 -
我明白这一点。我认为错误可能不在 Q.all 中,而是在生成承诺数组的函数中
标签: arrays angularjs request q angular-promise