Arrays Q.all的Promise数组
我有一个链接数组,这是我在第一个请求中得到的。我的目标是去每个环节收集数据。所以我想对每一个请求做出承诺,将它们全部推到一个数组中,然后传递给Q.all来解决所有承诺。问题是我不能返回承诺并转到下一个链接 下面是函数,我尝试在其中发出多个请求并收集数据Arrays Q.all的Promise数组,arrays,angularjs,request,q,angular-promise,Arrays,Angularjs,Request,Q,Angular Promise,我有一个链接数组,这是我在第一个请求中得到的。我的目标是去每个环节收集数据。所以我想对每一个请求做出承诺,将它们全部推到一个数组中,然后传递给Q.all来解决所有承诺。问题是我不能返回承诺并转到下一个链接 下面是函数,我尝试在其中发出多个请求并收集数据 function arrayPromise(linksArr){ function collectingData(elem){ var deferredNew = Q.defer(); var url = elem; r
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;
}
promiseArr应声明为数组:
var promiseArr = [];
如果这不能解决问题,请提供您可能看到的错误。存在多个问题 首先是在 deferredNew.resolve(items); 项在本地范围中定义,而不是在deferredNew.resolveitems所在的范围中的任何位置定义;评估 另一个:将空数组分配给promiseArr也会有所帮助 还有一个:requesturl、functionerror、response、html没有在任何地方分配结果,并且在您认为返回promice DelferredNew.resolveitems的函数中没有返回语句 PS
还有更多错误,请检查所有函数是否返回值,例如$'...filter。。。不重新获得价值观然后传递给Q.all来解决所有承诺-我想你误解了Q.all的功能。它不会解析传入的承诺,它会在传入数组中的所有承诺解析时解析,或者在任何一个承诺被拒绝时拒绝。我理解这一点。我认为错误可能不在Q.all中,而是在生成承诺数组的函数中。这是一个很好的观点,但没有任何变化。我没有看到任何错误。for循环中的函数似乎永远不会返回。您能更具体一点吗?你在开火吗?不,没有。看起来脚本卡在了用于注释请求函数的循环内的函数中。同时请粘贴您的请求功能。还请控制台登录您传入的arr。 deferredNew.resolve(items);