Хобрук: Ваш путь к мастерству в программировании

Обещание jQuery с getJSON и обратным вызовом

У меня есть вызов ajax с обратным вызовом. Я хочу вызвать другой метод ТОЛЬКО после завершения обратного вызова. Я использовал обещание API из jQuery, но, как вы можете видеть ниже, второй метод вызывается до завершения первого.

Есть идеи?

  my.data = function () {
     var loadFlights = function (callback) {
        //$.getJSON("/api/Acceptance/", function (data) {
        //    callback(data);
        //}); 
        $.getJSON("/api/Acceptance").success(function (data) {
           console.log("first: " + new Date().getTime());
           callback(data); 
        })
        .then(console.log("second:" + new Date().getTime()));
     };

     return { load: loadFlights }
  }();

результат на консоль:

second:1357393615115 
first: 1357393615246 

Ответы:


1

Вместо предоставления функции обратного вызова для .then() вы передаете вывод console.log("second:" + new Date().getTime()) (именно поэтому second печатается немедленно).

Создайте анонимную функцию, которая оборачивает код, который вы хотите вызвать (точно так же, как вы делали это в .success()):

$.getJSON("/echo/json").success(function(data) {
  console.log("first: " + new Date().getTime());
}).then(function() {
  console.log("second:" + new Date().getTime())
});

Демонстрация: http://jsfiddle.net/Blender/fJb7h/

05.01.2013
  • Лучший ответ, потому что миллисекунды на выходе делают его очень ясным 06.02.2019
  • это, но внутри функции и возвращаемого значения? 25.06.2020

  • 2

    Попробуйте с этим:

    // Assign handlers immediately after making the request,
    // and remember the jqxhr object for this request
    var jqxhr = $.getJSON( "example.json", function() {
      console.log( "success" );
    })
      .done(function() {
        console.log( "second success" );
      })
      .fail(function() {
        console.log( "error" );
      })
      .always(function() {
        console.log( "complete" );
      });
    
    // Perform other work here ...
    
    // Set another completion function for the request above
    jqxhr.complete(function() {
      console.log( "second complete" );
    });
    

    Ссылка: https://api.jquery.com/jquery.getjson/

    05.07.2018
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..