【问题标题】:How can I prevent calling the API multiple times?如何防止多次调用 API?
【发布时间】:2018-04-12 20:06:03
【问题描述】:

我有以下功能

$(window).localDatabase('schooldata', schoolId)

它要么返回一个存储的值,要么,如果过时,调用以下

return new Promise(function(resolve, reject){
    console.log('Downloading school database');
    axios.get('/api/school-database/'+schoolId+'/schooldata')
        .then(response => {
            $(window).storage(
                'planner',
                'save',
                'schooldata-'+schoolId,
                [response.data]
            ).then(function(response2){
                resolve(response.data);
                saveLastUpdate('schooldata-'+schoolId).then(function(response2){
                triggerOnVueBus('db-updated:schooldata');
            });
        });
    });
});

代码运行完美,除了我有许多需要数据库的 Vue 组件,并且在启动时多次调用我粘贴的 Promise。

如果一个请求已经挂起,我想实现一个不发出另一个请求的方法:我应该遵循什么逻辑?

【问题讨论】:

    标签: javascript promise vuejs2 axios


    【解决方案1】:

    我认为这应该可行。创建一次承诺并始终返回相同的承诺。如果一个 Promise 已经解析,.then 块会立即触发,并带有已经解析的值。像这样的:

    if (!this.promise) {
      this.promise = new Promise(function(resolve, reject) {
        console.log('Downloading school database');
        axios.get('/api/school-database/' + schoolId + '/schooldata')
          .then(response => {
            $(window).storage(
              'planner',
              'save',
              'schooldata-' + schoolId, [response.data]
            ).then(function(response2) {
              resolve(response.data);
              saveLastUpdate('schooldata-' + schoolId).then(function(response2) {
                triggerOnVueBus('db-updated:schooldata');
              });
            });
          });
      });
    }
    
    return this.promise;
    

    【讨论】:

    • 有趣的解决方案。 this.promise 在整个代码中是否应该是唯一的?如果 promise 已经解决,它会再次运行吗?
    • 我添加了一行来修复我正在寻找的内容。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多