How to replace 'Async=false' with promise

2019-07-18 10:19发布

问题:

I have read a lot about promises but I'm still not sure how to implement it.

I wrote the folowing AJAX call with async=false in order for it to work, but I want to replace it with promise as I saw that async=false is deprecated.

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;
}

Would you be able to help me? I just need an example to understand it.

回答1:

Return promise object from getBalance method:

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

and use it later like this:

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


回答2:

As first point, you don't want to set an asynchronous call to false as it will lock the UI.

You could simplify your method returning the ajax object and the handle it as a promise.

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);
});