繁体   English   中英

将参数绑定到函数 javascript

[英]bind arguments to function javascript

我正在尝试在第一次解决时运行第二次查询,如下所示:

const fn1 = secondQuery => $.get('1.json', data => secondQuery());
const fn2 = secondQuery => $.get('2.json', data => secondQuery());
const fn3 = secondQuery => $.get('3.json', data => secondQuery());
const fn4 = secondQuery => $.get('4.json', data => secondQuery());

const queries = [fn1, fn2, fn3, fn4];

const queriesWithArgs = queries.map((queryFn, index, arr) => {
    const nextQuery = arr[index + 1];

    if (!nextQuery) {
        return
    }

    return queryFn.bind(queryFn, nextQuery);
});

queriesWithArgs[0]();

但仍然收到错误 TypeError: secondQuery is not a function,而对 1.json 和 2.json 的请求工作正常 fn2 似乎没有接收 fn3 作为参数。 你能解释一下它是如何工作的吗?

您似乎认为arr参数是指queriesWithArgs数组,因此您可以从那里获取nextQuery 它不是,它指的是原始queries数组,并且您在调用这些nextQuery函数时没有进一步的参数。

相反,这里使用的正确工具是reduceRight ,而不是map ,其中nextQuery累加器确实会引用前一个结果(或初始值,这里是last回调):

const queries = [fn1, fn2, fn3, fn4];

const run = queries.reduceRight((nextQuery, queryFn) => {
    return queryFn.bind(null, nextQuery);
}, function last() {
    console.log("done");
});

run();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM