重写createModel
题目:如下,现在有一个creatModel函数,现在creatModel期望接受一个新字段p2,但是你的代码中已经到处调用了creatModel函数,你应该怎么编写一个creatModel2,然后全局替换掉creatModel?
js
// creatModel由第三方提供,不能修改,你也不知道细节
const creatModel = (params) => {
// 其他细节逻辑,你不知道,略
// 新加的参数
params.p2 = params.p2 || '0'
return async() => {
// 其他细节逻辑,你不知道,略
// return await fetch('https://xxxx')
// mock的逻辑
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(params.p1 + params.p2)
}, 1000)
})
}
}
// 很多地方都这样实现了
let fetchSome = creatModel({p1: 1})
fetchSome().then((res) => {
console.log(res)
})
答:
js
const creatModel2 = (p1) => {
// 返回一个函数,保持与creatModel相同的接口形态
return async () => {
// 在这个内部函数中获取p2并调用creatModel
const getP2 = async () => {
return Promise.resolve('2');
};
// 获取p2的值
const p2 = await getP2();
// 调用creatModel并执行它返回的函数
const creatModelResult = creatModel({p1, p2});
return creatModelResult();
};
};
let fetchSome2 = creatModel2('1')
fetchSome2().then((res) => {
console.log(res)
})