Javascript - 控制流程

标签 javascript jquery

我需要一些有关 javascript 中“控制流”最佳实践的帮助。在下面的示例中,我的 updateUI 函数无法正常工作,因为我的 saveData 函数尚未完成。

function save(data){
   saveData(data);
   updateUI();
}

为了临时修复,我这样做了

function save(data){
if(saveData(data)){
   updateUI();
   }
}

更新:这是我的 saveData 方法

function saveData(data){

$.ajax({
    url: url, // a variable, not important for this example
    data: data,
    type: "post",
    dataType: "json",
    success: function(data) { return true; },
    error: function(e) {
        console.log(e);
    }
})

我觉得我应该学习“标准”方式(如果存在的话)。

最佳答案

假设 saveData 正在调用 AJAX 函数(例如 $.ajax),让它返回该 AJAX 函数的结果:

function saveData() {
    return $.ajax({
        url: url, // a variable, not important for this example
        data: data,
        type: "post",
        dataType: "json"
    }).fail(function(e) {
        console.log(e);
    });
}

然后使用 jQuery 延迟链接来更新 UI:

saveData().done(updateUI).fail(showError);

它可以让您避免将回调函数传递到您的 saveData 调用中,这样您就可以将数据保存逻辑与 UI 逻辑完全分离。

编辑我更新了代码,以展示如何包含也使用延迟对象的默认fail处理程序,但仍然返回promise 这样您就可以在外部处理 UI 更新。

关于Javascript - 控制流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11569314/

相关文章:

javascript - 相对于点javascript放置对象

javascript - 报价未出现在网页上

php - 使用 jQuery 和 php 获取单选按钮的值

javascript - 在 Outlook Web Access (OWA) 中阅读电子邮件 header

javascript - <a> 为 :hover or <div> with hover event for buttons?

javascript - 如何在 Angularjs 中更改 json 数据

javascript - 如何使用 HTML 和 CSS 模拟从图像/div 到另一个图像/div 的光线

jquery - 如何从 JSPlumb 中的组中删除项目?

javascript - 无法将隐藏的 div 对齐以在可见性上垂直和水平显示在页面中心

javascript - 来自其他文件的函数未定义