获得带回家的作业: “您需要为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
答案 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
}