我已宣布'服务':
// myService.js
export default {
someService: _.debounce(
function someService(rule, value, callback) {
myApi.get(
`check-input/${value}`,
)
.then((response) => {
if (response.data.valid) {
callback();
} else {
callback(new Error('Invalid value'));
}
})
.catch(() => {
callback(new Error('Internal error. Please try later.'));
});
},2000)};
我想同时独立使用此服务两次。
我这样称呼这项服务:
const ValidatorA = (rule, value, callback) => {
const serviceA = myService.someService(rule, value, callback);
return serviceA;
};
const ValidatorB = (rule, value, callback) => {
const serviceB = myService.someService(rule, value, callback);
return serviceB;
};
ValidatorA
和ValidatorB
链接到模板中的不同输入,几乎同时运行。 (1s延迟)
我希望实现的是ValidatorA
和ValidatorB
将独立调用myService.someService
,因此应该同时进行两次调用。目前它只调用一次(从ValidatorB
调用,因为它在一秒钟之后被调用)。我认为ValidatorB
正在覆盖ValidatorA
的来电。
创建两个相同的方法是解决这个问题,但我相信有更优雅的解决方案。 Object.assign
或_deepClone
也未解决问题。
谢谢!
答案 0 :(得分:0)
我认为你可以将someServices
包裹在一个函数
export default {
getServices: function() {
return
_.debounce(
function someService(rule, value, callback) {
myApi.get(
`check-input/${value}`,
)
.then((response) => {
if (response.data.valid) {
callback();
} else {
callback(new Error('Invalid value'));
}
})
.catch(() => {
callback(new Error('Internal error. Please try later.'));
});
},2000)
}
};
然后
const ValidatorA = (rule, value, callback) => {
const serviceA = myService.getServices()(rule, value, callback);
return serviceA;
};
const ValidatorB = (rule, value, callback) => {
const serviceB = myService.getServices()(rule, value, callback);
return serviceB;
};