如何使用自定义函数实现承诺?

时间:2016-01-19 02:39:33

标签: javascript php jquery promise

我正在努力学习如何使用诺言。

触发事件并更新页面的内容

我使用下面的内容来触发我的活动并更新页面;

$("body").on("change", "input, select", function () {
    var field_id = ($(this).attr("id"));
    var container = ['#' + field_id + "_ck", '#' + field_id + '_err'];
    var data_type = ($(this).attr("data-type"));
    var value = document.getElementById(field_id).value;
    var data = validateInput(field_id, data_type, value);

    if (data[0] == 'true') {
        $(container[1]).addClass("pass_f");
        $(container[1]).html(data[2]);
        $(container[0]).html(data[1]);
    }else {
        $(container[1]).removeClass("pass_f");
        $(container[1]).addClass("err_f");
        $(container[1]).html(data[2]);
        $(container[0]).html(data[1]);
    }
});

validateInput()做什么

validateInput函数返回数据数组,供用户更正信息,如下所示;

function validateInput(field_id,data_type,value){
var a = 0;
var b = 1;
var c = 2;
var data = [];
    if (data_type == 'username'){
       n = value.length;
       if(n < 5 | n > 15){
         data[a] = "false";
         data[b] = "some html";
         data[c]  = "The error msg regarding this field length";
         return data;
        }
     // the code below would fit here
}

现在我的问题是

此db_check函数在页面更新

之后运行
function db_check(field_id, data_type, value, callbackFn) {
        $.ajax({
            url: 'ajax-php.php',
            type: 'post',
            dataType: 'json',
            data: { 'db_check': 'true', 'field_id': field_id, 'value': value, 'data_type': data_type },
            success: function (data2, status) {
                callbackFn(data2);
               // data2 is true or false
            },
          // in case of error
            }
        });         
    };

然后当我使用此db_check函数

 db_check(field_id, data_type, value, function callbackFn(data2){                                                              
        if (data2 == 'false') {
            data[a] = "false";
            data[b] = "some html";
            data[c] = "its not ok";
            return data;
        }
        else if (data2 == 'true') {
            data[a] = "true";
            data[b] = "some html";
            data[c] = "Its ok.";
            return data;
        }      
   });

我应该如何在我的代码中实现承诺

只有在页面更新后,数据数组才会填充正确的值。所以我想知道承诺在哪里?

是否必须使用validateInput?等;

我在这一切中迷失了,并且真的很感激一些提示,至少要了解如何使用诺言

请注意

这些函数返回的所有数据都是json数组。我注意到在他们使用json witch的所有文档中已经在我的代码中实现了

谢谢!

0 个答案:

没有答案