Javascript 当其中一些问题得到解决时,解决组合承诺

Javascript 当其中一些问题得到解决时,解决组合承诺,javascript,promise,Javascript,Promise,我有三个承诺。我需要把它们结合起来,创造一个新的承诺 类似这样的东西Promise.all('url1','url2','url3')或者如果有其他可能的方法来实现它 目的是并行地发射所有这些导弹 我的要求是,当其中任何一个问题得到解决时,最后一个问题将得到解决 我如何实现它?因此,您希望提出一个承诺,例如,当3个承诺中的2个解决时,该承诺就会解决。承诺。所有的承诺都不是正确的选择,因为,好吧,你不是在等待所有的承诺都得到解决。您必须手动执行此操作: 常量resolveAfterSeconds

我有三个承诺。我需要把它们结合起来,创造一个新的承诺

类似这样的东西
Promise.all('url1','url2','url3')
或者如果有其他可能的方法来实现它

目的是并行地发射所有这些导弹

我的要求是,当其中任何一个问题得到解决时,最后一个问题将得到解决


我如何实现它?

因此,您希望提出一个承诺,例如,当3个承诺中的2个解决时,该承诺就会解决。承诺。所有的承诺都不是正确的选择,因为,好吧,你不是在等待所有的承诺都得到解决。您必须手动执行此操作:

常量resolveAfterSeconds=函数(秒){ 返回新承诺(res=>{ 设置超时(分辨率,秒*1000) }) } 新承诺((决议)=>{ 常量承诺=[ 解析余秒(1), 解析余秒(2), 解析余秒(3), ]; 设resolveCount=0; promises.forEach(prom=>{ 然后(()=>{ console.log('resolving'); 解析计数++; if(resolveCount==promises.length-1)resolve(); }); });
})。然后(()=>console.log('done')因此,您希望提出一个承诺,当(例如)3个承诺中的2个承诺解决时,该承诺就会解决。承诺。所有的承诺都不是正确的选择,因为,好吧,你不是在等待所有的承诺都得到解决。您必须手动执行此操作:

常量resolveAfterSeconds=函数(秒){ 返回新承诺(res=>{ 设置超时(分辨率,秒*1000) }) } 新承诺((决议)=>{ 常量承诺=[ 解析余秒(1), 解析余秒(2), 解析余秒(3), ]; 设resolveCount=0; promises.forEach(prom=>{ 然后(()=>{ console.log('resolving'); 解析计数++; if(resolveCount==promises.length-1)resolve(); }); });
})。然后(()=>console.log('done')以下内容可能会给您一个想法。你有机会履行第一个和最后一个承诺。但逻辑很简单,你可以随心所欲。我没有包括错误处理拒绝逻辑,但这应该相当容易

bring()
函数返回一个在100~200ms内解析的承诺

var-bring=n=>newpromise(v=>setTimeout(v,~~(Math.random()*100)+100,`from-url{n}`),
pcnt=0,
proms=Array.from({length:10})
.map({u,i)=>bring(i).然后(v=>++pcnt===1?(console.log('Do stg with the first resolution promise${v}立即'),[pcnt,v])
:pcntconsole.log(“或当所有操作完成时,处理从第一个和最后一个承诺返回的值”,vs.filter(d=>!!d))
。作为控制台包装器{
最大高度:100%!重要

}
以下内容可能会给你一个想法。你有机会履行第一个和最后一个承诺。但逻辑很简单,你可以随心所欲。我没有包括错误处理拒绝逻辑,但这应该相当容易

bring()
函数返回一个在100~200ms内解析的承诺

var-bring=n=>newpromise(v=>setTimeout(v,~~(Math.random()*100)+100,`from-url{n}`),
pcnt=0,
proms=Array.from({length:10})
.map({u,i)=>bring(i).然后(v=>++pcnt===1?(console.log('Do stg with the first resolution promise${v}立即'),[pcnt,v])
:pcntconsole.log(“或当所有操作完成时,处理从第一个和最后一个承诺返回的值”,vs.filter(d=>!!d))
。作为控制台包装器{
最大高度:100%!重要

}
Promise.all将一个数组(承诺和/或值)作为参数,因此,如果您有
n
承诺,则其中的
n-1
承诺将解决最后一个剩余承诺,必须在以后解决。这就是您的意思吗。。?你到底想完成什么样的任务?我有一个要求,我想激发一些请求不同服务器的获取请求。不同的服务器承载某些类型的数据。哪一个数据集是第一个解决这个问题的。我的要求中也有一些组合。我想知道这种情况下是否存在任何经验证的模式。Promise.all将一个数组(承诺和/或值)作为参数。因此,如果您有
n
承诺,
n-1
中的任何一个都可以解决,那么最后剩下的一个必须在以后解决。这就是您的意思吗。。?你到底想完成什么样的任务?我有一个要求,我想激发一些请求不同服务器的获取请求。不同的服务器承载某些类型的数据。哪一个数据集是第一个解决这个问题的。我的要求中也有一些组合。我想知道这种情况下是否存在任何经过验证的模式。有太多的边缘情况,这段代码无法处理-请不要使用它。@Bergi当然这只是一个简单的例子,没有错误/拒绝处理,但您考虑的边缘情况是什么?是的,拒绝是一个非常重要的情况
promises.length==0
是另一个。