很棒的去抖动承诺不适用于调用函数?
Awesome debounce promise dosn't work with calling function?
我正在使用 awesome-debounce-promise 和简单的反应应用程序来延迟函数执行,这会触发一个操作来更新数据库中的 header。我也在使用 redux-saga 和 axios,使用 const 的官方示例不起作用,因为我在 axios 中创建 api 调用...onChange 操作我调用此函数...
changeCity = (e) => {
let storedHeader = JSON.parse(localStorage.getItem('offer_header'))
if(storedHeader !== null) {
let updatedHeader = {
id : storedHeader.id,
customer : storedHeader === null ? this.state.customer : storedHeader.customer,
address : storedHeader === null ? this.state.address : storedHeader.address,
city : e.target.value,
date : storedHeader === null ? moment(this.state.date).format("YYYY-MM-DD 00:00:00") : moment(storedHeader.date).format("YYYY-MM-DD 00:00:00"),
price : parseFloat(localStorage.getItem('offer_header_price')),
tax : parseFloat(localStorage.getItem('offer_header_price')) * 0.21,
total : parseFloat(localStorage.getItem('offer_header_price')),
}
const result = AwesomeDebouncePromise(this.props.editHeaderDB(updatedHeader), 2000);
console.log('result = ', result);
}
this.setState({
city: e.target.value
})
}
api.js
的代码片段
export function editOfferHeader_api(header) {
return axios.put(apiUrl + '/offerHeader/' + header.id ,header)
}
并且saga.js是
export function* editOfferHeaderDB(action) {
const response = yield call(editOfferHeader_api, action.payload)
if(!response && (!response.data || !response.message)) {
return yield put(editOfferHeaderDB_failure('Internal server error editing offer header'))
}
if(response.status === 200) {
localStorage.setItem('offer_header', JSON.stringify(response.data))
return yield put(editOfferHeaderDB_success(response.data))
} else {
return yield put(editOfferHeaderDB_failure('Error editing offer header'))
}
}
谁能帮我解决这个问题?
你必须确保你使用的是相同的去抖功能,而不是每次都调用AwesomeDebouncePromise
。
因为每次调用都会创建一个新函数,所以会破坏去抖动的目的。
所以您必须首先创建您的去抖函数,最好是在顶层,然后在您的代码中重用它。
(编辑:示例)
export const editOfferHeader_api = AwesomeDebouncePromise(
function (header) {
return axios.put(apiUrl + '/offerHeader/' + header.id ,header)
},
2000,
)
我正在使用 awesome-debounce-promise 和简单的反应应用程序来延迟函数执行,这会触发一个操作来更新数据库中的 header。我也在使用 redux-saga 和 axios,使用 const 的官方示例不起作用,因为我在 axios 中创建 api 调用...onChange 操作我调用此函数...
changeCity = (e) => {
let storedHeader = JSON.parse(localStorage.getItem('offer_header'))
if(storedHeader !== null) {
let updatedHeader = {
id : storedHeader.id,
customer : storedHeader === null ? this.state.customer : storedHeader.customer,
address : storedHeader === null ? this.state.address : storedHeader.address,
city : e.target.value,
date : storedHeader === null ? moment(this.state.date).format("YYYY-MM-DD 00:00:00") : moment(storedHeader.date).format("YYYY-MM-DD 00:00:00"),
price : parseFloat(localStorage.getItem('offer_header_price')),
tax : parseFloat(localStorage.getItem('offer_header_price')) * 0.21,
total : parseFloat(localStorage.getItem('offer_header_price')),
}
const result = AwesomeDebouncePromise(this.props.editHeaderDB(updatedHeader), 2000);
console.log('result = ', result);
}
this.setState({
city: e.target.value
})
}
api.js
的代码片段export function editOfferHeader_api(header) {
return axios.put(apiUrl + '/offerHeader/' + header.id ,header)
}
并且saga.js是
export function* editOfferHeaderDB(action) {
const response = yield call(editOfferHeader_api, action.payload)
if(!response && (!response.data || !response.message)) {
return yield put(editOfferHeaderDB_failure('Internal server error editing offer header'))
}
if(response.status === 200) {
localStorage.setItem('offer_header', JSON.stringify(response.data))
return yield put(editOfferHeaderDB_success(response.data))
} else {
return yield put(editOfferHeaderDB_failure('Error editing offer header'))
}
}
谁能帮我解决这个问题?
你必须确保你使用的是相同的去抖功能,而不是每次都调用AwesomeDebouncePromise
。
因为每次调用都会创建一个新函数,所以会破坏去抖动的目的。
所以您必须首先创建您的去抖函数,最好是在顶层,然后在您的代码中重用它。
(编辑:示例)
export const editOfferHeader_api = AwesomeDebouncePromise(
function (header) {
return axios.put(apiUrl + '/offerHeader/' + header.id ,header)
},
2000,
)