我尝试将Fetch API与promises一起使用,我对API进行了以下调用。
export const refreshTokenAPI = () => {
return fetch('/api/auth/gettoken/' ,{
cache: 'no-store',
headers: {
'Authorization': 'Basic '+ btoa(getToken() + ':'),
'pragma': 'no-cache',
'cache-control': 'no-cache'
}
})
.then(response => {
return handle_response(response)
})
.catch(error => {
throw error;
})
};
当我尝试拨打此电话时,响应只是等待'等待'并且不会从那里去任何地方。奇怪的是,当我从开发控制台内部禁用缓存时,它解析得很好。正如你从代码片段中看到的那样,我已经尝试了很多东西来禁用调用本身的缓存,但是他们都没有做任何事情。
我甚至在端点本身上尝试过老式缓存破坏,所以我完全不知所措!有什么想法吗?
编辑:事实证明,如果你等待足够长的时间(约40秒),它最终会在启用缓存的情况下解决...不知道为什么缓存会导致它挂起如此糟糕?
答案 0 :(得分:1)
所以我找到了一个解决方案,它实际上是在后端,似乎与Cache没什么关系。
我使用Python / Flask作为路由器,通过允许线程(app.run(debug=True, threaded=True, port=5000)
),问题就消失了。我不知道为什么会这样,但你有它。
我实际上找了一个可以重现问题的最小烧瓶应用程序。它只需要运行python 3和Flask。它位于github here,但这是代码:
Application.py:
from flask import Flask, render_template, jsonify
application = Flask(__name__)
@application.route('/')
def index():
return render_template('index.html')
@application.route('/foo/', methods = ['GET'])
def get_foo():
return jsonify({'message': 'bar'}), 200
if __name__ == '__main__':
# application.run(threaded = True) # This works
application.run() # This doesn't
/templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
Loaded...
</body>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
console.log('document ready');
fetch('/foo/').then(function(response) {
console.log('then triggered');
return response.json();
}).then(function(json) {
console.log(json)
});
});
</script>
</html>
很难相信标准的东西不起作用!