Javascript Array.prototype.some()异步

Javascript Array.prototype.some()异步,javascript,arrays,asynchronous,async-await,Javascript,Arrays,Asynchronous,Async Await,我需要在数组中运行一个异步代码。some()本身就在数组中,each()。 因此,基本上我希望回调是async,这样我就可以在回调中使用wait 但是无论是Array.prototype.some()还是Array.prototype.each()都不接受异步回调,这将要求它们返回一个承诺。这是我提出的some()和each()的异步版本 someAsync() Array.prototype.someAsync=函数(callbackfn){ 返回新承诺(异步(解析、拒绝)=>{ 等待Prom

我需要在
数组中运行一个异步代码。some()
本身就在
数组中,each()
。 因此,基本上我希望回调是
async
,这样我就可以在回调中使用
wait


但是无论是
Array.prototype.some()
还是
Array.prototype.each()
都不接受异步回调,这将要求它们返回一个承诺。

这是我提出的
some()
each()
的异步版本

someAsync()
Array.prototype.someAsync=函数(callbackfn){
返回新承诺(异步(解析、拒绝)=>{
等待Promise.all(this.map)(异步项=>{
如果(等待callbackfn(项目))解决(true)
})).捕获(拒绝)
解析(false)
})
}
//例子
['',0,未定义,false].someAsync(async e=>e)。然后(e=>console.log(e))//false
['',0,未定义,false,true].someAsync(async e=>e)。然后(e=>console.log(e))//true
everyAsync()
Array.prototype.everyAsync=函数(callbackfn){
返回新承诺(异步(解析、拒绝)=>{
等待Promise.all(this.map)(异步项=>{
如果(!wait callbackfn(项目))解析(false)
})).捕获(拒绝)
解析(真)
})
}
//例子
[[],{},1,true].everyAsync(异步e=>e)。然后(e=>console.log(e))//true
[[],{},1,true,false].everyAsync(异步e=>e)。然后(e=>console.log(e))//false
缺点
  • 它们只接受回调,并且只接受一个参数
  • 即使
    someAsync()
    在解析truthy值时解析
    true
    ,而
    everyAsync()
    在解析falsy值时解析
    false
    ,对于每个元素,回调仍然会执行到最后,即使方法的承诺已经解析。我认为这没有简单的解决办法,只要

这是我提出的
some()
each()
的异步版本

someAsync()
Array.prototype.someAsync=函数(callbackfn){
返回新承诺(异步(解析、拒绝)=>{
等待Promise.all(this.map)(异步项=>{
如果(等待callbackfn(项目))解决(true)
})).捕获(拒绝)
解析(false)
})
}
//例子
['',0,未定义,false].someAsync(async e=>e)。然后(e=>console.log(e))//false
['',0,未定义,false,true].someAsync(async e=>e)。然后(e=>console.log(e))//true
everyAsync()
Array.prototype.everyAsync=函数(callbackfn){
返回新承诺(异步(解析、拒绝)=>{
等待Promise.all(this.map)(异步项=>{
如果(!wait callbackfn(项目))解析(false)
})).捕获(拒绝)
解析(真)
})
}
//例子
[[],{},1,true].everyAsync(异步e=>e)。然后(e=>console.log(e))//true
[[],{},1,true,false].everyAsync(异步e=>e)。然后(e=>console.log(e))//false
缺点
  • 它们只接受回调,并且只接受一个参数
  • 即使
    someAsync()
    在解析truthy值时解析
    true
    ,而
    everyAsync()
    在解析falsy值时解析
    false
    ,对于每个元素,回调仍然会执行到最后,即使方法的承诺已经解析。我认为这没有简单的解决办法,只要

有一个
部分
,还有一些优化,但这可能是一个更好的问题,因为这个问题最好用不同的方式解决。有一个
some
并进行了一些优化,但这可能是一个更好的问题,因为这个问题最好用另一种方式解决。承诺执行者在可以抛出的时候不应该是
async
,而这些人可以–数组中的任何拒绝都将导致未经处理的拒绝
(resolve,reject)=>Promise.all(…).then(()=>{resolve(false或true)}.catch(reject)
相反,可能吗?缺点只存在于元素没有按顺序处理。按顺序处理元素有其自身的缺点,但它更符合这些方法的同步版本。@Ry-为什么不呢?您只需记住在catch块中使用
try/catch
并调用
reject
。与使用
then/catch
的建议类似。将此设置为wiki,以便大家都可以改进it@JakeHolzinger:我说(嗯,打了一个额外的“the”)“他们什么时候能扔”。如果正确使用
try
,则它们不能抛出。承诺执行者在可以抛出时不应该是
async
,而这些执行者可以–数组中的任何拒绝都将导致未经处理的拒绝
(resolve,reject)=>Promise.all(…).then(()=>{resolve(false或true)}.catch(reject)
相反,可能吗?缺点只存在于元素没有按顺序处理。按顺序处理元素有其自身的缺点,但它更符合这些方法的同步版本。@Ry-为什么不呢?您只需记住在catch块中使用
try/catch
并调用
reject
。与使用
then/catch
的建议类似。将此设置为wiki,以便大家都可以改进it@JakeHolzinger:我说(嗯,打了一个额外的“the”)“他们什么时候能扔”。如果您正确使用
try
,他们将无法抛出。