Ana*_*han 7 javascript callback promise
我得到"对象"值而不是确切的值.如何使用回调函数获取返回的值?
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);
Run Code Online (Sandbox Code Playgroud)
Ben*_*aum 28
承诺就像一个封闭的盒子:

您的上述代码与延迟对象一起创建了该框,并让您知道将来的某个时间您可以打开它.那段时间是以上代码调用的时间.resolve.
当你这样做时,results = loadDB(2)你会在结果中放一个方框.
promise还有一个方法可以打开框,处理值并返回值上的另一个框(同时打开任何其他框).那种方法是.then:
在框中,它确实:
=>(
.=>
)=> 
也就是说,它取出框,打开它并应用一个函数来对其中的值执行某些操作,然后返回另一个带有新值的框.
所以,如果你想处理这个值,你需要挂在盒子打开的地方,就像Bergi建议的那样:
loadDB(2).then(function(val){
console.log("response***", val);
}); // this also returns a promise btw
Run Code Online (Sandbox Code Playgroud)
你不能得到的决心值了一个承诺(在这里:异步)的范围内.
相反,您需要将console.log调用以及依赖于它的所有其他内容移动到 promise上下文中:
loadDB(2).then(function(val){
console.log("response***", val);
});
Run Code Online (Sandbox Code Playgroud)