SAPUI5 Ожидание отложенного объекта // ожидание функции .done()

Я знаю, что по этому поводу есть несколько потоков, но я думаю, что в контексте SAPUI5 ни один поток не отвечает на эту общую тему об отложенных/синхронных вызовах в SAPUI5.

В My Controller я получил:

  test : function() {

    var dfd = $.Deferred();
    var sServiceUrl = '/sap/opu/odata/sap/xyz/MySet?$format=json';

    var post = $.ajax({
        url: sServiceUrl,
        type: "GET"
    });

    post.done(function(data){
        console.log(data);
        dfd.resolve();
    });

    post.fail(function(){
        console.log("Error loading: " + sServiceUrl);
        dfd.reject();
    });

    return dfd.promise();

  },

на мой взгляд, я вызываю метод и хочу дождаться результата, как мне правильно управлять им?

  var test = oController.test();
  console.log(test);
  $.when(test).done().then(console.log("finished"));

также этот подход не ждет:

$.when(oController.test()).then(console.log("finished"));

Как и ожидалось, тест не определен, «завершен» регистрируется, и когда .done из метода готов, он регистрируется. но я хочу дождаться этого (и в лучшем случае вернуть данные из ajax обратно)..

как мне дождаться продолжения post.done() в моем представлении?


person dotchuZ    schedule 03.11.2014    source источник


Ответы (1)


Оператор () вызывает функцию. Вы сами вызываете функцию, функция не вызывается методом then. Что происходит, когда вы вызываете функцию log, и ее возвращаемое значение устанавливается в качестве обработчика. Поскольку вы хотите передать аргумент методу console.log, вы можете использовать анонимную функцию:

dfd.resolve(data);

// ...

$.when(oController.test()).then(function(data) {
    console.log('finished', data);
});
person undefined    schedule 03.11.2014
comment
Как вы думаете, проблема в том, чтобы вложить несколько функций then? скажем, 10 раз, потому что мне приходится ждать несколько вызовов бэкэнда подряд? - person dotchuZ; 03.11.2014
comment
@zyrex Вы можете передать несколько объектов deferred/promise в $.when, затем обработчик then вызывается, когда все они разрешены. - person undefined; 03.11.2014