将参数绑定到函数javascript

时间:2019-03-16 10:38:34

标签: 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 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不是一个函数,而对1.json和2.json的请求正常工作fn2似乎未接收到fn3作为参数。 您能解释一下它是如何工作的吗?

1 个答案:

答案 0 :(得分:2)

您似乎认为arr参数引用了queriesWithArgs数组,因此您可以从此处获取nextQuery。它不是,它引用原始的queries数组,而您正在调用这些nextQuery函数而没有更多参数。

相反,此处使用的正确工具是reduceRight,而不是map,其中nextQuery累加器的确会引用先前的结果(或初始值,此处为{{1 }}回调):

last