【问题标题】:How to replace 'Async=false' with promise in javascript?如何在javascript中用promise替换'Async = false'?
【发布时间】:2016-12-18 02:12:49
【问题描述】:

我已经阅读了很多关于 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;
}

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

【问题讨论】:

  • 也许你应该尝试构建你的逻辑以避免 async=false 行为,如果你正在学习 Promise,你应该尝试在每次需要它们时用 Promise 加载东西,但你可以决定抓住它们或者不在 promise 方法中。

标签: javascript ajax asynchronous promise


【解决方案1】:

首先,您不想将异步调用设置为 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);
});

【讨论】:

    【解决方案2】:

    getBalance方法返回promise对象:

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

    然后像这样使用它:

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

    【讨论】:

    • 谢谢你的回答,你能简单解释一下吗? then 会执行吗? (失败或成功)
    • 第一个方法然后执行成功。您可以添加第二种方法作为失败时执行的参数。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • then 采用两个回调函数,当服务器响应加载完毕时将执行:then(function successCallback(response) { /* data loaded successfully */ }, function errorCallback(error) { console.log(error); })
    • 非常感谢,我让它完美运行,谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2023-04-08
    • 2020-02-05
    • 2017-01-25
    • 2018-12-11
    相关资源
    最近更新 更多