javascript承诺在循环中或如何逐个调用函数
我和苗条的J一起工作。所以我有一个带有url的数组和函数(foo),它用一个url生成一些东西。此函数返回承诺 如果我这样做没关系:javascript承诺在循环中或如何逐个调用函数,javascript,loops,asynchronous,promise,Javascript,Loops,Asynchronous,Promise,我和苗条的J一起工作。所以我有一个带有url的数组和函数(foo),它用一个url生成一些东西。此函数返回承诺 如果我这样做没关系: foo(urls).then(foo, orError).then(foo, orError)..... 但我想在循环中调用foo(),所以我尝试以下方法: for ( var i = 0; i < urls.length; i++ ) { foo(urls).then(foo, error); } 这是我的循环 for ( var i = 0; i
foo(urls).then(foo, orError).then(foo, orError).....
但我想在循环中调用foo(),所以我尝试以下方法:
for ( var i = 0; i < urls.length; i++ ) { foo(urls).then(foo, error); }
这是我的循环
for ( var i = 0; i < urls.length; i++ ) {
visitPage(urls)
.then(visitPage, showError);
}
for(var i=0;i
类似的技术是通过实际的for循环或.reduce
链接动作本身。既然您要求使用for循环,那么让我们继续:
var queue = Promise.resolve(); // start waiting
urls.forEach(function(url){
queue = queue.then(function(result){
// put result somewhere
return visitPage(url);
});
});
queue.then(function(){
// all done here
});
您可以将
visitPage
更改为只获取一个url,而不是对url进行变异,这应该会更好。您想做什么?只是异步访问URL吗?queue
不等于循环返回的最后一个Promise
?当你在评论中说此处全部完成
@SuhailGupta是的,他的意思是,一旦你传递给最后一个then块的函数被调用,这意味着所有URL都已经以串行方式命中。作为补充,您可以添加catch块来处理错误。
var queue = Promise.resolve(); // start waiting
urls.forEach(function(url){
queue = queue.then(function(result){
// put result somewhere
return visitPage(url);
});
});
queue.then(function(){
// all done here
});