将参数绑定到函数javascript

将参数绑定到函数javascript,javascript,ajax,bind,Javascript,Ajax,Bind,我正在尝试运行第二个查询,第一个查询被解析为: 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 f

我正在尝试运行第二个查询,第一个查询被解析为:

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]();
但仍然得到错误类型错误:secondQuery不是一个函数,而对1.json和2.json的请求工作正常。fn2似乎没有接收fn3作为参数。
你能解释一下它是如何工作的吗?

你似乎认为
arr
参数引用了
queryswithargs
数组,这样你就可以从那里开始你的
下一次查询了。它不是,它指的是原始的
查询
数组,您正在调用这些
nextQuery
函数,而不需要进一步的参数

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


什么是
queryFn.bind(queryFn,nextQuery)应该实现?啊,我猜你的意思是
queryFn.bind(null,nextQuery)
或者干脆
()=>queryfn(nextQuery)
?^
null
作为
bind
的第一个参数会更有意义。是的@Bergi你说得对。这一定是我第一次看到
reduceRight
被用于这里。我想这只是一个奇怪的观察。经典的promise
reduce
trick的回调版本。:-)事实上,假设这个
$.get
是jQuery,你可以使用promise
reduce
技巧来做一些更地道的事情(在我看来)。哦,明白了,谢谢。这只是一个综合训练任务,所以我的目的是动态创建一些类似fn1.bind(fn2.bind(fn3.bind(fn4)),然后调用fn1()@Бццццццццццццццццццццццццц1094。
const queries = [fn1, fn2, fn3, fn4];

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

run();