У меня есть приложение фляги на Beanstalk, которое выглядит примерно так:
application = Flask(__name__)
CORS(application)
@application.route('/price', methods=['GET', 'POST'])
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
return_value = some_function_that_takes_about_one_minute()
return str(return_value)
if __name__ == '__main__':
application.debug = True
application.run()
И я называю эту конечную точку фляги на Beanstalk из JS в расширении Google Chrome в коде, который выглядит следующим образом:
var xhr = new XMLHttpRequest();
xhr.onload = function () {
alert('This always runs...');
alert(xhr.response);
};
xhr.open('POST', 'http://MYBEANSTALKURL/price', true);
xhr.timeout = 200000;
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ "zip": 90025.0, "city": "los_angeles"}));
Это замечательно, и расширение chrome успешно вызывает конечную точку колбы на beanstalk, и, кажется, код запускается, согласно журналам.
НО есть проблема с возвратом вывода приложения beanstalk на мой JS.Когда мое приложение фляги выглядит следующим образом:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
return_value = some_function_that_takes_about_one_minute()
return str(return_value)
Кажется, что приложение фляги работает, но в код JS ничего не возвращается, и загрузка в JS не вызывается, когда приложение beanstalk возвращаетзначение, которое странно.Если я изменяю код фляги на этот, хотя все работает:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
return "Meow"
Затем внезапно возвращаемое значение возвращается к моему JS, и вызывается метод onload, и эта строка:
alert(xhr.response);
в моем браузере всплыло предупреждение "Мяу".Похоже, что эта проблема связана со скоростью возврата приложения склянки бобового стебля.Когда приложение возвратной колбы возвращает что-то действительно быстрое (возвращает «Мяу»), расширение Chrome JS возвращает значение и отображает его.Но когда конечная точка приложения фляги занимает немного больше времени, кажется, что ничего не возвращается.
Похоже, проблема с тайм-аутом или что-то может быть?Или, возможно, он работает, когда он возвращается в коде фляги раньше, - красная сельдь, но это, безусловно, кажется уместным.Кажется, что код Python в приложении фляги на beanstalk все работает независимо от того, что, но кажется, что если метод фляги занимает некоторое время, JS просто перестает слушать ответ ...
РЕДАКТИРОВАТЬ: также, в случае, еслиэто уместно, вот файл manifest.json для расширения chrome:
{
"name": "A browser action with a popup that changes the page color",
"description": "Change the current page color",
"version": "1.0",
"permissions": [
"activeTab",
"http://MYBEANSTALKURL/"
],
"browser_action": {
"default_title": "Set this page's color.",
"default_icon": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
},
"default_popup": "popup.html"
},
"icons": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
},
"manifest_version": 2
}
РЕДАКТИРОВАТЬ 2: похоже, что когда я добавляю time.sleep () к конечной точке колбы, у него есть некоторые интересные результаты.Если я делаю это:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
time.sleep(0.05)
return "Meow"
Тогда JS работает и отображает возвращаемое значение в предупреждении, НО, если я делаю это:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
time.sleep(1.0)
return "Meow"
Внезапно это не работает снова.Похоже, что есть определенная проблема, связанная с тем, сколько времени требуется для работы конечной точки колбы, но я не могу понять, почему это вызывает проблемы.