如何用javascript中的承诺替换'Async = false'?

时间:2016-08-11 11:07:07

标签: javascript ajax asynchronous promise

我已经阅读了很多关于promises的内容,但我仍然不确定如何实现它。

我使用async=false编写了下面的AJAX调用以使其正常工作,但我希望将其替换为promise,因为我看到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;
}

你能帮助我吗?我只需要一个例子来理解它。

2 个答案:

答案 0 :(得分:4)

首先,您不希望将异步调用设置为false,因为它会锁定UI。

您可以简化返回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);
});

答案 1 :(得分:3)

getBalance方法返回promise对象:

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

然后像这样使用它:

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