2016-08-11 2 views
2

Я много читал о promises, но я все еще не уверен, как его реализовать.Как заменить «Async = false» на обещание в javascript?

Я написал следующий вызов AJAX с async=false, чтобы он работал, но я хочу заменить его обещанием, поскольку я видел, что async=false устарел.

self.getBalance = function (order) { 
    var balance; 
    $.ajax({ 
     url: "/API/balance/" + order, 
     type: "GET", 
     async: false, 
     success: function (data) { 
      balance = data; 
     }, 
     done: function (date) { 
     } 
    }); 
    return balance; 
} 

Вы могли бы мне помочь? Мне просто нужен пример, чтобы понять это.

+0

Может быть, вы должны попытаться структурировать вашу логику, чтобы избежать асинхронного = ложные моделей поведения, если вы изучаете обещания, вы должны попытаться загрузить вещи с обещаниями каждый раз, когда вы нуждаетесь в них, но вы можете решить, чтобы поймать их или нет внутри метод обетования. – fbiagi

ответ

3

Возвращение объекта обещание getBalance метода:

self.getBalance = function (orderNumber) { 
    return $.ajax({ 
     url: "/Exchange.API/accountInfo/balance/" + orderNumber, 
     type: "GET" 
    }); 
} 

и использовать его позже, как это:

service.getBalance().then(function(balance) { 
    // use balance here 
}); 
+0

Спасибо за ваш ответ, можете ли вы просто дать мне краткое объяснение? Будет ли 'то' казнить в любом случае? (сбой или преуспеть) – user3378165

+0

Первый метод затем выполняется при успехе. Вы можете добавить второй метод в качестве параметра, который выполняется, когда он терпит неудачу. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then – fbiagi

+0

'then' выполняет две функции обратного вызова, которые будут выполняться при загрузке ответа сервера:' then (function successCallback (response) {/ * данные загружены успешно * /}, функция errorCallback (ошибка) {console.log (ошибка);}) '. – dfsq

4

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

Вы можете упростить метод, возвращающий объект ajax, а дескриптор - как обещание.

self.getBalance = function (orderNumber) {  
    return $.ajax({ 
     url: "/Exchange.API/accountInfo/balance/" + orderNumber, 
     type: "GET", 
    }); 
}; 
var demoNumber = 12; 
self.getBalance(demoNumber).then(function(data){ 
    console.log(data); 
},function(err){ 
    console.log("An error ocurred"); 
    console.log(err); 
}); 
Смежные вопросы