将函数作为方法附加到JS中的另一个函数

时间:2018-11-04 12:04:54

标签: javascript

获得带回家的作业: “您需要为fetch(url)函数构建一个存根,它将失败n个请求,并且从n + 1开始将成功获取数据。必须通过以下方式配置它,以传递失败的请求数(n,必填),并且是可选的参数“解析/拒绝之前的等待时间”。这也是重置调用fetch.reset()的请求计数器的方式。就像原始的fetch()一样,函数应返回Promise。” 因此,我们需要具有上述功能的类似访存功能。问题出在fetch.reset()方法上。无法弄清楚如何将函数附加到回调函数。

因此,除了fetch.reset()以外,所有这些都没有问题。

function outer (num, time) {
  let count = 1;

  return function fetchIt() {
    return new Promise((resolve, reject) => {
      if (count > num) {
        count++;
        setTimeout(()=>{resolve('ok');}, time * 1000) // here actual data will be returned/resolved
      } else {
        count++;
        setTimeout(()=>{reject();}, time * 1000)
      }
    })
  }
}

let newFetch = outer(2, 2);

newFetch().then(()=>console.log('ok'), ()=>console.log('not ok')); // 'not ok'
newFetch().then(()=>console.log('ok'), ()=>console.log('not ok')); // 'not ok'
newFetch().then(()=>console.log('ok'), ()=>console.log('not ok')); // 'ok'

现在,如何使newFetch.reset()方法将计数器重置为1? 尝试过的原型-不。我认为问题在于从外部范围访问内部函数。

为这些东西投入精力: http://plnkr.co/edit/FiXKyDJ1E2cv8LuUMxRM

1 个答案:

答案 0 :(得分:0)

在返回之前将fetchIt分配给变量,然后在该变量上添加函数:

function outer (num, time) {
  ...
  let fetchIt = function fetchIt() {
      ...
  }
  fetchIt.reset = function reset() {
      count = 1 // Or whatever you need to do
  }
  return fetchIt
}