1

私はテーブルparent_relationsにいくつかのデータを持っています. すべての ID がツリー構造内にある配列 (arrayCollect) に入力しようとしています。
私の主な質問は、すべてのイベント クエリが終了した後に end() 関数を起動する方法です。
Deferredsでそれは可能ですか?

テーブル

persons table
persons_id  | Name 
---------------------
1       |   Name1       
2       |   Name2       
3       |   Name3   
4       |   Name4   
5       |   Name5   
6       |   Name6   
7       |   Name7   
8       |   Name8   
9       |   Name9   
10      |   Name10  
11      |   Name11  
12      |   Name12
13      |   Name13
14      |   Name14
15      |   Name15

parents_relations table
p_r_id  | contacts_id | parent_contacts_id
-----------------------------------------
1       |   11      |   3
2       |   11      |   4
3       |   3       |   1
4       |   3       |   2
5       |   9       |   3
6       |   9       |   4
7       |   8       |   1
8       |   8       |   2
9       |   5       |   1
10      |   5       |   2
11      |   4       |   14
12      |   4       |   15

延期された開始

var startItem = {
        p_r_id: '',
        contacts_id: '',
        parent_contacts_id: '11'
    };

    var arrayCollect = [];
    var temp = [];
    temp.push(startItem);
    $.when(builder(temp))
        .done(function(dt){
              endd();
            console.log(arrayCollect);
    });

これが再帰関数です

    builder = function ( items) {
    var deferB     = $.Deferred();
    deferArr.push(deferB);

    if (items.length > 0) {
        $.each(items, function (index, persn) {
                arrayCollect.push(persn);
                $.when(sqlGet_Parents(persn.parent_contacts_id, li)

                ).done(function(ret) {
                    deferB.resolve(ret);
                    builder(ret)
                }).fail(function(){ 
                    alert("$.when(html5db.webdb.sqlGet_Parents.... failed!"); 
                });
        });
    } else { 
        deferB.resolve();
    } 
    return deferB.promise();
}

これがクエリ機能です

sqlGet_Parents = function(idd) {
    var deferB     = $.Deferred();
    var selectOk = function (transaction, results) {
        var arrids = [];
        for (var i = 0; i < results.rows.length; i++) {
            arrids.push(results.rows.item(i));
        }
        deferB.resolve(arrids);
    },
    selectFail = function() {
        var arrr = [];
        deferB.reject(arrr);
    };
    var db = html5db.webdb.db;
    db.transaction(function(tx){
        tx.executeSql('SELECT * from parents_relations WHERE contacts_id = ? ',
        [idd],
        selectOk,
        selectFail
        );
    });
    return deferB.promise();
}

function endd(){ 
   console.log(arrayCollect);
   alert('Finaly!!!');
}
4

0 に答える 0