如何更改 setTimeout 以在收到值之前发送请求?
How can I change setTimeout to send the request until a value is received?
在我的应用程序中,我提供了用户可以导入电子表格文件的功能。文件本身正在发送到后端应用程序,一段时间后可以根据 ID 从不同的端点获取结果。问题是后端准备响应可能需要很长时间,并且这个时间因文件大小而异。到目前为止,我一直在使用 setTimeout
函数,但由于后端响应时间不同,我不能这样做。
这是我的代码:
new_batch.vue
export default {
name: 'BackboneSyncProducts',
data() {
return {
styleCodes: [],
fetchedProductSyncResult: [],
loadId: null,
}
},
watch: {
loadId(newValue, oldValue) {
if (!oldValue && newValue) {
setTimeout(() => {
fetchSyncedProductsResultRequest(this, newValue).then(response => {
this.fetchedProductSyncResult = response.data['result']
})
}, 3000)
}
}
},
整个功能需要异步。如何使用 fetchSyncedProductsResultRequest
函数访问后端应用程序直到 response.data['result']
不为空?
尝试使用 setInterval 发送多个请求,直到文件将在后端处理并且 return 一个 non-null 值。
您也可以使用 websockets,但这需要更新后端 API.
export default {
name: 'BackboneSyncProducts',
data() {
return {
styleCodes: [],
fetchedProductSyncResult: [],
loadId: null,
}
},
watch: {
loadId(newValue, oldValue) {
if (!oldValue && newValue) {
const intervalId = setInterval(() => {
fetchSyncedProductsResultRequest(this, newValue).then(response => {
if (response.data['request']) {
clearInterval(intervalId);
this.fetchedProductSyncResult = response.data['result']
}
})
}, 1000)
}
}
},
在我的应用程序中,我提供了用户可以导入电子表格文件的功能。文件本身正在发送到后端应用程序,一段时间后可以根据 ID 从不同的端点获取结果。问题是后端准备响应可能需要很长时间,并且这个时间因文件大小而异。到目前为止,我一直在使用 setTimeout
函数,但由于后端响应时间不同,我不能这样做。
这是我的代码:
new_batch.vue
export default {
name: 'BackboneSyncProducts',
data() {
return {
styleCodes: [],
fetchedProductSyncResult: [],
loadId: null,
}
},
watch: {
loadId(newValue, oldValue) {
if (!oldValue && newValue) {
setTimeout(() => {
fetchSyncedProductsResultRequest(this, newValue).then(response => {
this.fetchedProductSyncResult = response.data['result']
})
}, 3000)
}
}
},
整个功能需要异步。如何使用 fetchSyncedProductsResultRequest
函数访问后端应用程序直到 response.data['result']
不为空?
尝试使用 setInterval 发送多个请求,直到文件将在后端处理并且 return 一个 non-null 值。 您也可以使用 websockets,但这需要更新后端 API.
export default {
name: 'BackboneSyncProducts',
data() {
return {
styleCodes: [],
fetchedProductSyncResult: [],
loadId: null,
}
},
watch: {
loadId(newValue, oldValue) {
if (!oldValue && newValue) {
const intervalId = setInterval(() => {
fetchSyncedProductsResultRequest(this, newValue).then(response => {
if (response.data['request']) {
clearInterval(intervalId);
this.fetchedProductSyncResult = response.data['result']
}
})
}, 1000)
}
}
},