Javascript 串联运行阵列中的承诺
我有一个链接数组,但是像这样并行执行它们会使服务器挂起并超时Javascript 串联运行阵列中的承诺,javascript,arrays,for-loop,promise,Javascript,Arrays,For Loop,Promise,我有一个链接数组,但是像这样并行执行它们会使服务器挂起并超时 var pages = linksArray.then(function(arr){ return arr.map(function(link) { return loader(link); }); }).then(function(data){ console.log(data); return dat
var pages = linksArray.then(function(arr){
return arr.map(function(link) {
return loader(link);
});
}).then(function(data){
console.log(data);
return data;
});
如何加载与链接数组相关联的页面?loader是一种获取html的promise最常见的串行运行promise数组的方法是使用
数组
var pages = linksArray.then(function (arr) {
var pArray = [];
return arr.reduce(function (promise, link) {
var ret = promise.then(function() {
return loader(link)
// the next 3 lines will ensure all links are processed - any failed links will resolve with a value == false
.catch(function(err) {
return false;
});
});
pArray.push(ret);
// next three lines log when each loader has finished
ret.then(function() {
console.log('finished', link);
});
return ret;
}, Promise.resolve())
.then(function() {
return Promise.all(pArray);
});
})
然后可以像这样访问结果
pages.then(function (data) {
// data is an array of results of loader
console.log(data);
}).catch(function(err) { // any errors should be logged here
console.log(err);
});
工作原理:简单地说,对loader
的每个调用在执行之前都会“等待”直到前一个调用被解析——每个加载程序的有效承诺都保存在一个数组中。最后一个加载程序解析后,Promise.all
返回一个Promise,该Promise解析为对loader
如果需要了解array.reduce的工作原理,请阅读
你期望(需要?页面
会是什么?你期望(需要)在块中作为数据
是什么?然后
块?@JaromandaX我有一个链接数组,希望得到一个链接数组中的每个对应页面strings@JaromandaX朋友,5点后还没回来,怎么回事minutes@Jaromanda是的,朋友,请澄清一下works@Jaromanda所以,它不返回的原因是,一些页面加载失败?var ret=promise.then(函数(){return loader(link.replace(/^\s*.\s*$/g',);});推挤(后退);返回ret;},Promise.resolve())最后一部分“Promise.resolve()”,怎么会有逗号?我的下载速度是0.5Mbps,上传速度是6Mbps,链接数是750,20分钟后仍然没有返回。有什么想法吗?那么,用最新编辑的代码,你什么也得不到?查看开发者工具控制台。。。有错误吗?查看开发人员工具网络选项卡。。。是否有迹象表明请求正在发送?成功?失败?750个链接!-也许您不必一次只限制一个,而是可以使用-这允许每秒有一定数量的请求,只要使用新代码重新启动它。我正在从git bash控制台运行node。我不知道如何监控是否有任何内容发送哦,这是节点-当然您可以在代码的适当部分添加console.log
s来查看它在做什么