Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更优雅的方法来推送和返回数组?_Javascript_Arrays_Promise - Fatal编程技术网

Javascript 有没有更优雅的方法来推送和返回数组?

Javascript 有没有更优雅的方法来推送和返回数组?,javascript,arrays,promise,Javascript,Arrays,Promise,我仍然在考虑承诺,但在使用它们的过程中,我意识到减少一个fetch对象数组并在它们旁边设置一些限制是很好的。在创建我的慢速查询函数时,我意识到我想不出比这更好的方法来推送数组并返回该数组 所以。我的问题是,在Javascript中,有没有比这更优雅的方法一步推送到数组并返回数组? constmqry=q=>fetch(q)。然后(r=>r.json());//获取并返回json const throttle=t=>newpromise(r=>setTimeout(r,t));//添加承诺的超时

我仍然在考虑承诺,但在使用它们的过程中,我意识到减少一个fetch对象数组并在它们旁边设置一些限制是很好的。在创建我的慢速查询函数时,我意识到我想不出比这更好的方法来推送数组并返回该数组

所以。我的问题是,在Javascript中,有没有比这更优雅的方法一步推送到数组并返回数组?

constmqry=q=>fetch(q)。然后(r=>r.json());//获取并返回json
const throttle=t=>newpromise(r=>setTimeout(r,t));//添加承诺的超时
const slowQrys=(q,t)=>//传入一个链接数组,以毫秒为单位
Promise.all(q.reduce((r,o)=>//减少查询
//这是一个大问题。还有更优雅的方式吗
//将两个元素推送到一个数组并返回一个数组?
[…r,mQry(…o),节流阀(t)]
,[]);

在别人说之前,我非常清楚拆分数组可能效率不高,但我可能从来没有使用过超过10个项目,所以这不是什么大问题。

我猜您的意图是链接您的获取,这样两个连续的获取必须至少间隔
t
ms

这条链子就是这样的

Promise.all([fetch, wait]), Promise.all([fetch, wait]), ...
这样写的方法是

const slowQrys = (links, t)=>links.reduce((p, link)=>{
    return p.then(_=>{
        return Promise.all([
            fetch(link),
            wait(t)
        ])
    })
}, Promise.resolve())

与一般操作相比,更清洁、更高效

q.reduce((r, o) =>
    [...r, f(...o), g(t)])
用途:


但是,在您的问题中,创建
节流阀(t)
位于
承诺中每个提取操作的旁边。所有
都是完全错误的。所有
setTimeout
计时器都将并行运行并同时解析,因此没有必要创建多个计时器。它们也不会与提取操作交互,只会延迟整个任务的完成promise
slowQrys
返回并弄乱它解析到的数组。

flatMap
,但是你使用
节流阀的方式毫无意义。它应该做什么?(是并行运行抓取吗?)这不是节流。节流将防止函数被过度调用-至少在这段代码中,这似乎没有任何作用。老实说,我被这段代码弄糊涂了。很难理解单字母变量是什么。但似乎您应该能够执行
r.concat(mQry(…o),throttle(t))
而不是创建一个新的数组并进行传播。@VLAZ:这完全是一样的。@Ry-这比传播并重新创建数组更“优雅”。虽然,正如我所说,我不确定这段代码应该做什么。我的大脑拒绝处理它,所以我只是放弃了。不是我要求的,而是简洁的实现。然后我(两者都不是)不了解您的目标。Implem(如您提供的)基本上会并行启动所有抓取+所有相关的“节流”(这不是很有用,因为它们不会减慢Promise.all的最终同步之外的任何速度)。如果您的目标是获取、等待、获取等,那么使用reduce,如我提供的构造?(
p.then(=>fetch(link))。然后(=>wait(t))
)我不是在问如何使整个事情变得更好。我是在问是否有一种更优雅的方法来返回数组,同时将一个新值推入其中。然后VLAZ是一种方法,使用
concat
你也可以
r.push(a,b),r
使用返回的表达式的值是r这一事实(它是对数组的引用)
q.flatMap(o =>
    [f(...o), g(t)])