如何更改 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)
      }
    }
  },