gpt4 book ai didi

javascript - 如何防止多次调用 API?

转载 作者:行者123 更新时间:2023-12-03 03:08:47 25 4
gpt4 key购买 nike

我有以下功能

$(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。

我想实现一种方法,如果已经有一个请求处于待处理状态,则该方法不会发出另一个请求:我应该遵循什么逻辑?

最佳答案

我认为这应该可行。创建一次 Promise 并始终返回相同的 Promise。如果 Promise 已解决,则立即触发 .then block 并使用已解决的值。像这样的事情:

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;

关于javascript - 如何防止多次调用 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com