Javascript 在for循环中创建承诺后如何使用Promise.all()
我有一个函数foo(),它包含一个在for循环中解析的承诺。我想多次运行foo(),每次都给它不同的参数。然后我想对所有这些的结果做点什么。Promise.all()是在for循环结束时运行,还是在foo()中的所有承诺返回后运行?或者它会说“这些都不是承诺!”然后嘲笑我Javascript 在for循环中创建承诺后如何使用Promise.all(),javascript,promise,Javascript,Promise,我有一个函数foo(),它包含一个在for循环中解析的承诺。我想多次运行foo(),每次都给它不同的参数。然后我想对所有这些的结果做点什么。Promise.all()是在for循环结束时运行,还是在foo()中的所有承诺返回后运行?或者它会说“这些都不是承诺!”然后嘲笑我 var foo = (x) => { for (var i = 0; i < 100; i++) { someOtherFunctionThatReturnsAPromise(x).then
var foo = (x) => {
for (var i = 0; i < 100; i++) {
someOtherFunctionThatReturnsAPromise(x).then(returnSomething());
}
};
function nowDoEverything() {
return Promise.all([foo(1), foo(2), foo(3)]).then(doSomethingWithAllThoseReturnedValues());
}
nowDoEverything();
var foo=(x)=>{
对于(变量i=0;i<100;i++){
返回promise(x)的其他函数;
}
};
函数nowdeyeverything(){
返回Promise.all([foo(1)、foo(2)、foo(3)])。然后(dosomethingwhichallthosereturnedvalues());
}
现在什么都做了;
foo()是否需要返回承诺?如果是这样的话,如果foo()中的承诺是在for循环中生成的,我该怎么做呢
声明
Promise.all(iterable)方法返回一个承诺,当iterable参数中的所有承诺都已解决时,该承诺将得到解决,或者由于第一个通过的承诺被拒绝而拒绝
这段视频很好地解释了基本的承诺,但我似乎在尝试做一些架构师不打算/预期的事情。是的,没错。这是Promise.all()的签名。:
Promise.all:(Iterable是的,没错。这是Promise.all()的签名。
:
Promise.all:(Iterable是,foo()
需要返回一个承诺。您可以将每个承诺添加到数组中,然后使用Promise。all
等待所有承诺:
var foo = x => {
var results = [];
for (var i = 0; i < 100; i++) {
results.push(
someOtherFunctionThatReturnsAPromise(x)
.then(returnSomething)
);
}
return Promise.all(results);
};
var foo=x=>{
var结果=[];
对于(变量i=0;i<100;i++){
结果:推(
返回Promise(x)的其他函数
.然后(返回某物)
);
}
返回承诺。全部(结果);
};
是,foo()
需要返回承诺。您可以将每个承诺添加到数组中,然后使用promise。all
等待所有承诺:
var foo = x => {
var results = [];
for (var i = 0; i < 100; i++) {
results.push(
someOtherFunctionThatReturnsAPromise(x)
.then(returnSomething)
);
}
return Promise.all(results);
};
var foo=x=>{
var结果=[];
对于(变量i=0;i<100;i++){
结果:推(
返回Promise(x)的其他函数
.然后(返回某物)
);
}
返回承诺。全部(结果);
};
将承诺推送到数组,从foo
返回数组,从中的函数中省略()
。然后()
避免立即调用函数。使用foo()
调用中的扩展元素将承诺返回到的单个数组。然后()
链接到Promise.all()
var foo=(x)=>{
var-arr=[];
对于(变量i=0;i<100;i++){
arr.push(返回promise(x)的其他函数),然后(返回某物);
}
返回arr
};
函数nowdeyeverything(){
返回承诺。全部([…foo(1),…foo(2),…foo(3)])
.然后(dosomething包含所有已返回的值)
}
现在一切都好了
.catch(err=>console.log(err));
将承诺推送到数组,从foo
返回数组,从中的函数中省略()
。然后()
避免立即调用函数。使用foo()
调用中的扩展元素将承诺返回到的单个数组。然后()
链接到Promise.all()
var foo=(x)=>{
var-arr=[];
对于(变量i=0;i<100;i++){
arr.push(返回promise(x)的其他函数),然后(返回某物);
}
返回arr
};
函数nowdeyeverything(){
返回承诺。全部([…foo(1),…foo(2),…foo(3)])
.然后(dosomething包含所有已返回的值)
}
现在一切都好了
.catch(err=>console.log(err));
好吧,它将立即解析为[未定义,未定义,未定义]
@Ryan Right,这一点都没有帮助。好吧,它将立即解析为[未定义,未定义,未定义]
@Ryan Right,这一点都没有帮助。太好了,谢谢!省略号是什么(…foo(1))对于“@GlenPierce…
标点符号可以是扩展元素或rest元素,具体取决于使用情况,请参阅。如果没有扩展元素,则在传递给的数组中会有三次或N次foo
调用数组。然后()
从Promise.all()
而不是单个数组。Promise.all([1,2,3],[4,5,6]])。然后(data=>console.log(data));Promise.all([…[1,2,3],…[4,5,6])。然后(data=>console.log(data))
。太好了,谢谢!省略号是什么(…foo(1))对于“@GlenPierce…
标点符号可以是扩展元素或rest元素,具体取决于使用情况,请参阅。如果没有扩展元素,则在传递给的数组中会有三次或N次foo
调用数组。然后()
从Promise.all()
而不是单个数组。Promise.all([1,2,3],[4,5,6]])。然后(data=>console.log(data));Promise.all([…[1,2,3],…[4,5,6]])。然后(data=>console.log(data))
。
var foo = (x) => {
var arr = [];
for (var i = 0; i < 100; i++) {
arr.push(someOtherFunctionThatReturnsAPromise(x).then(returnSomething));
}
return arr
};
function nowDoEverything() {
return Promise.all([...foo(1), ...foo(2), ...foo(3)])
.then(doSomethingWithAllThoseReturnedValues)
}
nowDoEverything()
.catch(err => console.log(err));