Мой API фляги, развернутый на beanstalk, время от времени возвращает значения в JS, вызывая его - PullRequest
0 голосов
/ 21 марта 2019

У меня есть приложение фляги на 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"

Внезапно это не работает снова.Похоже, что есть определенная проблема, связанная с тем, сколько времени требуется для работы конечной точки колбы, но я не могу понять, почему это вызывает проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...