我正在获得"对象"值而不是确切的值。 如何使用回调函数获取返回的值?
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);
答案 0 :(得分:21)
承诺就像一个封闭的盒子:
您的上述代码与延迟对象一起创建了该框,并让您知道将来某个时候您可以打开它。那段时间是以上代码调用.resolve
的时间。
当您执行results = loadDB(2)
时,您将一个放在结果中。
承诺还有一个打开框的方法,对值进行处理并返回值上的另一个框(同时打开任何其他框)。该方法为.then
:
在框中,它确实:
=>(。=> )=>
也就是说,它取出框,打开它并应用一个函数来对其中的值执行某些操作,然后返回另一个带有新值的框。
所以,如果你想处理这个值,你需要挂在盒子打开的地方,就像Bergi建议的那样:
loadDB(2).then(function(val){
console.log("response***", val);
}); // this also returns a promise btw
答案 1 :(得分:7)
您无法获得承诺(此处为:异步)上下文的解析值 out 。
相反,您需要将console.log
调用以及依赖于它的所有其他内容移动到承诺上下文中:
loadDB(2).then(function(val){
console.log("response***", val);
});