establecer una variable para obtener el retorno de la función de callback utilizando la promesa

Obtengo el valor de “objeto” en lugar del valor exacto. ¿Cómo obtengo el valor devuelto usando una función de callback?

function loadDB(option, callBack){ var dfd = new jQuery.Deferred(), db = window.openDatabase('mydb', '1.0', 'Test DB', 1024*1024), selectQuery = "SELECT log FROM LOGS WHERE id = ?"; db.transaction(function(tx){ tx.executeSql(selectQuery,[option],function(tx,results){ var retval; if( results.rows.length ) { retval = unescape(results.rows.item(0)['log']); } var returnValue = dfd.resolve(retval); }); }); return dfd.promise(); } results = loadDB(2).then(function(val){ return val; } ); console.log("response***",results); 

Una promesa es como una caja cerrada:

enter image description here

Su código anterior con el objeto diferido crea el cuadro y le informa que en algún momento en el futuro podrá abrirlo. Ese momento es cuando el código anterior llamará a .resolve .

Cuando haces results = loadDB(2) estás poniendo un cuadro en los resultados.

Una promesa también tiene un método que abre la caja, trabaja sobre el valor y devuelve otra casilla sobre el valor (también abre cajas adicionales en el camino). Ese método es .then :

En cajas, lo hace:

enter image description here => ( abierto . => mi ) => mi

Es decir, toma la casilla, la abre y aplica una función que hace algo con el valor que contiene y luego devuelve otra casilla con el nuevo valor.

Por lo tanto, si desea procesar el valor, debe conectar el único lugar donde está abierto el cuadro, como sugirió Bergi:

 loadDB(2).then(function(val){ console.log("response***", val); }); // this also returns a promise btw 

No puede obtener el valor de resolución de un contexto prometedor (aquí: asíncrono).

En su lugar, deberá mover la llamada a console.log y todo lo demás que depende de ella al contexto de la promesa:

 loadDB(2).then(function(val){ console.log("response***", val); });