在另一个回调函数的结果之前等待回调函数

时间:2015-10-06 09:46:38

标签: javascript callback synchronization web-sql

我的方法有问题。 int printSizeOfDatabase() { int size = recordNumber * sizeof(struct structInit); fprintf(stderr, "The size of the database is %d bytes.\n\n", size); return size; } 必须等待方法elenco_prodotti继续添加最终输出,但现在我只看到空div,因为它需要是同步的。

拜托,帮助我!

sincro.query

2 个答案:

答案 0 :(得分:2)

您需要等待多个异步事件发生。

目前,您的代码无效,因为您可能在完成循环后完成capturing loop variables in a callback function,这意味着cp,{{{}} {1}},x

您可以使用Promises解决此问题:

y

答案 1 :(得分:0)

好的,这对一个查询很有用,但我有这个吗?

它不起作用......我不是很好。

var FunzioniDB = function () {

this.elenco_prodotti = function (callBack) {
    //$time=microtime(true);

    var output = '';
    var promises = [];

    var promessa = new Promise(function (resolve, reject) {

        //query per vedere tutti gli id di categoria
        comanda.sincro.query('SELECT id FROM categorie WHERE 1 ORDER BY id ASC', function (cat) {
            //console.log(cat.length);

            for (var key in cat) {
                //console.log(cat[key].id);
                //query per vedere l'ultimo numero di pagina
                comanda.sincro.query("SELECT pagina FROM prodotti WHERE pagina NOT NULL AND pagina != '' AND categoria='" + cat[key].id + "' ORDER BY pagina DESC LIMIT 1;", function (pag) {
                    output += "<div class='pag_" + i + " cat_" + cat[key].id + "' style='display:none;'>";
                    //console.log("cat1 - pagine:= " + parseInt(pag[0].pagina));
                    //apre le intestazioni della comanda 
                    //

                    for (var i = 1; i <= (parseInt(pag[0].pagina) + 1) && i <= 4; i++) {

                        output += '<div class="bs-docs-section btn_COMANDA">\n\
                                <div class="bs-glyphicons">\n\
                                    <ul class="bs-glyphicons-list">';

                        for (var y = 1; y <= 6; y++) {
                            for (var x = 1; x <= 8; x++) {

                                var posizione_attuale = y + "-" + x;
                                var query_prodotti = 'SELECT cat_varianti,colore_tasto,id,descrizione,prezzo_1 FROM prodotti WHERE categoria="' + cat[0].id + '" AND pagina="' + pag[0].pagina + '" AND posizione="' + posizione_attuale + '" LIMIT 1;';

                                //console.log(query_prodotti);


                                comanda.sincro.query(query_prodotti, function (oggetto) {


                                    //console.log(typeof(oggetto.prodotto[0]));
                                    if (oggetto !== undefined && oggetto[0] !== undefined && oggetto[0]['descrizione'].length > 0)
                                    {
                                        var prodotto = oggetto[0];

                                        //console.log(prodotto);

                                        output += '<li class="btn_comanda" style="background-color:' + prodotto["colore_tasto"] + ';" onClick="aggiungi_articolo("' + prodotto["id"] + '","' + prodotto["descrizione"] + '","' + prodotto["prezzo_1"] + '&euro; ","null",$("#quantita_articolo").val(),"null","' + prodotto["cat_varianti"] + '");"> \n\
                                 <span class="glyphicon-class">' + prodotto['descrizione'] + '<br/>€ ' + prodotto['prezzo_1'] + '</span> \n\
                                 </li>';
                                    }
                                    else
                                    {
                                        output += '<li style="display:table;"> \n\
                                 <span class="glyphicon" aria-hidden="true"></span> \n\
                                 <span class="glyphicon-class"></span> \n\
                                 </li>';
                                    }


                                });
                            }
                        }

                        output += '</ul></div></div></div>'; //chiude le intestazioni
                        resolve({output:output});
                        //alla fine deve creare una pagina in piu, ma il massimo è 4 pagine
                    }
                });
            }
            ;
        });
    });
    promises.push(promessa);


    Promise.all(promises).then(function (data) {
        callBack(data[0].output);
        });
   };
 };